有条件地添加到 jQuery .when
Posted
技术标签:
【中文标题】有条件地添加到 jQuery .when【英文标题】:Conditionally add to jQuery .when 【发布时间】:2014-04-10 18:53:23 【问题描述】:当我的页面加载时,我会进行一次 AJAX 调用,然后根据页面上的内容进行另一次调用。我想在两者结束时调用一个函数;我该怎么做?
var dfd = $.when( $.ajax(...) );
if( $("type").val() == "something" )
dfd.when( $.ajax(...) );
dfd.then(function()
// final code
);
我找不到太多关于添加到 $.when "conditionally"
或“稍后”的内容,因为这些搜索词太接近承诺本身的原始目的,所以我只是得到 $.when(a, b).then(c)
的标准用法
谢谢
【问题讨论】:
dfd
应该等于 $.ajax(...)
。
【参考方案1】:
您的代码应该看起来更像这样:
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/
【讨论】:
或者更确切地说是var deferreds = [$.ajax(...)];
,然后是deferreds.push($.ajax(...))
。他想要进行不止一个 AJAX 调用。
@RocketHazmat 我不确定你的意思。你想用 deferred 初始化数组,然后再将相同的 deferred 推入它吗?我试图编写上面的代码,以便 OP 可以轻松地引入更多具有更多条件的延迟对象,以防他的示例很简单。如果我错过了船,请告诉我。
您想将 2 个延迟推入数组。他正在进行 2 个 ajax 调用。一个在if
之外,一个在if
内,都需要在数组中。
.apply - 那是缺少的关键!谢谢!!
请注意,此答案中的代码确实总是进行两个 ajax 调用,但只是有条件地等待其中一些调用。【参考方案2】:
我已经使用 Q.js 库成功地做到了这一点; http://documentup.com/kriskowal/q/
$ajax(...).then(function(val)
if($("type").val() == "something") return $.ajax(...);
);
【讨论】:
【参考方案3】:要执行问题要求的操作(执行一个呼叫,然后可选地调用第二个呼叫),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 );
【讨论】:
以上是关于有条件地添加到 jQuery .when的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 中向 Case、When 条件添加排序