使用jQuery中的延迟对象处理多个ajax调用的不同成功和失败状态

$.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); }); 

尝试

 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) }) }) }); 

jsfiddle http://jsfiddle.net/guest271314/91Lomwr3/