有条件地添加到jQuery .when

时间:2014-03-07 14:47:51

标签: jquery promise jquery-deferred .when

当我的页面加载时,我会进行一次AJAX调用,然后根据页面上的内容进行另一次调用。我想在两者结束时调用一个函数;我该怎么做?

var dfd = $.when( $.ajax(...) );

if( $("type").val() == "something" ) {
  dfd.when( $.ajax(...) );
}

dfd.then(function() { 
   // final code
});

我找不到添加到$.when "conditionally"或“更晚”的内容,因为这些搜索字词与承诺本身的原始目的太接近了,所以我只得到$.when(a, b).then(c)的标准用法

由于

3 个答案:

答案 0 :(得分:7)

您的代码应该更像这样:

var dfd = $.ajax(...);
var dfd2 = $.ajax(...);

var deferreds = [];

if($("type").val() == "something")
    deferreds.push(dfd)

if($("other").val() == "somethingElse")
    deferreds.push(dfd2)

$.when.apply( $, deferreds )
  .then( callback, failureCallback );

参考:https://api.jquery.com/jQuery.when/

答案 1 :(得分:1)

要执行问题所要求的内容,(执行一个调用,然后可选择调用第二个调用),可以按照以下修改Mister Epic的答案。基本上,我已经在函数中包含了ajax调用,因此只有在条件为真时才调用dfd2。

var dfd = function () { 
   $.ajax(...); 
};
var dfd2 = function () { 
    $.ajax(...); 
};

var deferreds = [];

deferreds.push(dfd())

if($("type").val() == "something")
    deferreds.push(dfd2())

$.when.apply( $, deferreds )
  .then( callback, failureCallback );

答案 2 :(得分:0)

我使用Q.js库成功完成了这项工作; http://documentup.com/kriskowal/q/

$ajax(...).then(function(val){
     if($("type").val() == "something") { return $.ajax(...);}
)};