【发布时间】:2011-08-12 00:30:49
【问题描述】:
我正在尝试在 HTML 中使用 JQuery 完成以下操作序列。
- 构造了一个url列表
- 这些 url 中的每一个都是使用 $.getJSON(url) 并行请求的
- 等待所有请求完成或失败(可能会发生 404)
- 获取所有已完成的 JSON 请求的数据并做一些事情。
我构建了下面发布的 JavaScript 代码。它完美地工作,除非其中一个请求由于 404 错误而失败:然后,$.when 不会运行,因为如果请求失败,它会立即中止。您能否以某种方式覆盖 ajax 请求,使它们不会失败,而是返回一个空源?
我已经阅读了this 和this 的帖子,但它没有提供在所有查询完成后可以运行代码的解决方案。
function fetchData() {
queries = [];
//urls is initialized somewhere else containing all urls
for(var url in urls) {
queries.push($.getJSON(url));
}
$.when.apply(this, queries).done(function() {
console.log("Finished all queries, got "+arguments.length+" results");
//Now arguments is a array containing the results of all requests
}
//function returns instantly, no problem!
}
【问题讨论】:
-
我在 jquery 方面没有那么丰富的经验,但您似乎需要查询计数器。 IE。为您将发送的查询数量设置一个计数器。在成功或相应的错误函数中,递减计数器(Javascript 中的一元递减原子吗?)。一旦计数器达到零,您就知道所有请求都已完成,您可以处理结果。当然,一旦所有查询完成,您必须缓存查询结果以供以后处理。
标签: javascript jquery ajax json