【发布时间】:2014-11-27 12:46:38
【问题描述】:
$.when 为同时查询的所有多个 ajax 调用返回一个 Deferred 对象。
如果一切成功.done() 执行,如果任何一个url 失败.fail() 执行。
如何处理部分成功状态? (即)如果5个url被传递给$.when,如果3个成功我们需要处理成功状态,2个失败我们需要处理失败状态。
$.when($.getJSON(headerUrl), $.getJSON(tasksUrl), $.getJSON(testingTrackerUrl), $.getJSON(highlightsUrl)))
.then(function(headerData, tasksData,testingTrackerData,highlightsData) {
printData(headerData, tasksData,testingTrackerData,highlightsData);
})
.fail(function(data, textStatus, jqXHR) {
console.error('Got error in '+jqXHR);
});
【问题讨论】:
-
你不能用
$.when做到这一点,它会创建一个master deferred,当所有底层promise 都解决时解决,或者当底层promise 之一失败时失败。没有中间人,如果你想为不同的ajax调用处理不同的状态,你必须单独做。 -
@adeneo 是的,我知道不可能有中间状态。但是想知道如何处理多个 ajx 调用的部分成功和失败状态。我们可以利用 jqXHR 的 readystate 并识别每个调用的状态吗?或者jQuery中还有其他方法吗?
-
您为每个 ajax 调用使用适当的回调。
-
@adeneo 需要异步调用。粘贴上面的代码sn-p。请让我知道继续处理每个 ajax 调用的回调
-
您基本上必须实现
$.when()的新版本(也许$.whenAll()在最后一个承诺完成之前不会完成。您甚至可以获取$.when()的代码,更改函数名并稍作修改。