$.when 有任意数量的延迟对象? [复制]
Posted
技术标签:
【中文标题】$.when 有任意数量的延迟对象? [复制]【英文标题】:$.when with arbitrary number of deferred objects? [duplicate] 【发布时间】:2016-02-26 02:43:51 【问题描述】:我有一个任意大小的 url 数组,我需要执行 AJAX 请求:
var urls = [
"www.whatever.com",
"www.somesite.com/some/path"
];
我需要向它们发出 AJAX 请求,并按照它们在数组中指定的顺序将它们的响应输出到 DOM。我认为这将是 jQuery 的 $.when()
的完美用例。
var promises = [];
for (index in urls)
promises.push($.ajax(urls[index]));
$.when(promises).done(function(data) // <--- I guess you can't do this?
// do something
);
但根据文档,您必须使用逗号分隔列表将延迟函数传递给它。
$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) )
.then( myFunc, myFailure );
这会迫使您对要发送的延迟对象的数量进行硬编码。在我的情况下,我的数组中的项目数会随着页面的变化而变化。是否可以将 ajax 请求数组传递给$.when()
,这样我发送的 ajax 请求数就无关紧要了?
【问题讨论】:
你可以试试$.when.apply($, promises).then(function(responses)
是的,就像您将值数组传递给您正在调用的任何函数一样:.apply.
请在提出新问题之前使用搜索。
【参考方案1】:
您需要将Function.prototype.apply
用作$.when.apply($, promises)
,而不是$.when(promises)
请注意,这也意味着您的 then
回调可能需要使用 arguments
集合来访问每个延迟的相关结果。
【讨论】:
以上是关于$.when 有任意数量的延迟对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章