可以在$ .when()。done()中使用带有ajax调用的函数吗?

时间:2017-05-14 14:58:33

标签: jquery ajax .when

我不确定我是如何遵循延迟,承诺和$.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.}

我正在查看的具体案例是加载可用仪表板列表,然后在前端填充列表后,从列表中捕获特定仪表板并为其运行加载功能。

我发现它没有破坏并且会运行(可能?)但是我不知道它是否是正确的编码方式,或者它是不是在工作而不是同时破坏。

感谢您对此有任何建议和专业知识!

-Jeff

1 个答案:

答案 0 :(得分:0)

  

[...]如果带有ajax调用的函数可以在$ .when()中使用。

如果您跳过周围的$.ajax并且函数本身返回$.ajax - 调用,那么您的示例将有效。如果您传递给$.when的内容不是延迟(在您的情况下,函数返回undefined),它将立即解决,我认为不是您想要的。此外,当您只有一个Deferred时,$.when毫无意义。如果您的函数将返回$.ajax,则可以执行anotherFunction().done(...)

之类的操作
  

我正在查看的具体案例是加载可用仪表板列表,然后在前端填充列表

确实,$.when背后的想法是:等待多个延迟完成。您可以将它们作为参数传递,例如

let d1 = $.ajax(...);
let d2 = $.ajax(...);

$.when(d1, d2).done(...)

但如果你只有一个ajax电话,你就不会需要$.when