$.when
为同时查询的所有多个ajax调用返回Deferred对象。
如果一切都成功.done()
执行,并且任何一个网址失败.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);
});
答案 0 :(得分:6)
尝试
var request = function (url) {
return $.getJSON(url)
}
, requests = [
headerUrl
, tasksUrl
, testingTrackerDataUrl
, highlightsDataUrl
];
// return array of `resolved` , `rejected` jqxhr objects
$.when(
$.map(requests, function (_request, i) {
return request(_request)
})
)
// do stuff with `resolved` , `rejected` jqxhr objects
.always(function (arr) {
$.each(arr, function (key, value) {
// `success`
value.then(function (data, textStatus, jqxhr) {
console.log(data, textStatus, jqxhr);
printData(data)
}
// `error`
, function (jqxhr, textStatus, errorThrown) {
console.log(jqxhr, textStatus, errorThrown)
})
})
});