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