对于我的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);
任何想法?
答案 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(...);