jQuery Promises不适用于多个jqXHR

时间:2013-03-06 13:55:58

标签: jquery

对于我的jQuery应用程序,我想实现延迟加载。 因此,我创建了一个对象,包含我所有的jqXHR承诺。

当我现在将所有人归为一个陈述

var resultset = new Object();
resultset.one = $.getScript('http://......');
resultset.two = $.getScript('http://......');

$.when(resultset.one,resultset.two).then(
function(){ alert('success')},
function(){alert('failure')}
);

然后它总是进入错误状态。我不知道为什么,因为js调试器告诉我,所有请求都是好的(状态200)。

JQ API文档告诉我们以下内容将起作用:

$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
  .then(myFunc, myFailure);

任何想法?

3 个答案:

答案 0 :(得分:2)

您可以将promises与getScript()一起使用,并等到所有脚本都加载完毕,例如:

$.when(
    $.getScript( "/mypath/myscript1.js" ),
    $.getScript( "/mypath/myscript2.js" ),
    $.getScript( "/mypath/myscript3.js" )
).done(function(){

    //place your code here, the scripts are all loaded

});

答案 1 :(得分:1)

以下是一个很好的解释原因:

  

$.when()的语法是$.when(one, or, more, deferreds) - 因此,如果要传递数组中的多个延迟,则需要.apply(),因为您不希望将方法调用构建为一个字符串并使用eval(在这种情况下确实是邪恶)。

What's the meaning of $.when.apply(null, a method) in jQuery?

答案 2 :(得分:0)

好的,我使用以下解决方法工作了。 - >也许有人可以解释我的区别,拜托?

$。when.apply($,(resultset.one,resultset.two))。then(...);