可以在 $.when().done() 中使用带有 ajax 调用的函数吗? [复制]
Posted
技术标签:
【中文标题】可以在 $.when().done() 中使用带有 ajax 调用的函数吗? [复制]【英文标题】:Can a function with an ajax call be used in $.when().done()? [duplicate] 【发布时间】:2017-10-13 09:42:39 【问题描述】:我不确定我是否完全遵循 deferred、promise 和 $.when()
的工作方式。我已经阅读了https://api.jquery.com/jquery.when/,但我很好奇是否可以在$.when()
内部使用带有ajax 调用的函数。
我在文档中看到了这个例子:
$.when( $.ajax( "test.aspx" ) ).then(function( data, textStatus, jqXHR )
alert( jqXHR.status ); // Alerts 200
);
这也是一种可接受的方法吗?
$.when( $.ajax( anotherFunction() ) ).done(
//on completion of the ajax call inside "anotherFunction()" do something here.
);
anotherFunction()$.ajax...do some ajax stuff here.
我正在查看的具体案例是加载可用仪表板的列表,然后在前端填充列表后,从列表中捕获特定仪表板并为其运行加载函数。
我发现它不会中断并且会运行(也许?),但我不知道这是否是编码它的正确方法,或者它是否只是不工作而不是同时中断。
感谢您对此的任何建议和专业知识!
-杰夫
【问题讨论】:
$.when
可用于进行单个 ajax 调用......当需要的数据可用时,只需在第一个回调中进行第二次调用
【参考方案1】:
[...] 如果可以在 $.when() 中使用带有 ajax 调用的函数。
如果您跳过周围的$.ajax
并且函数本身返回$.ajax
-调用,则您的示例将起作用。如果您传递给$.when
的不是延迟的(在您的情况下,函数返回未定义),它将立即解决,我认为这不是您想要的。此外,当您只有一个 Deferred 时,$.when
毫无意义。如果您的函数将返回$.ajax
,您可以执行anotherFunction().done(...)
之类的操作。
我正在查看的具体案例是加载可用仪表板列表,然后在前端填充列表后
确实,这就是 $.when
背后的想法:等待多个 Deferred 完成。您可以将它们作为参数传递,例如
let d1 = $.ajax(...);
let d2 = $.ajax(...);
$.when(d1, d2).done(...)
但如果你只有一个 ajax 调用,你就不需要$.when
。
【讨论】:
但 OP 询问的是依赖 ajax 调用,而不是串行以上是关于可以在 $.when().done() 中使用带有 ajax 调用的函数吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
jquery $.when() .then() 和 .done() 之间的区别
jquery.when done 不起作用:它立即执行[关闭]