尝试
(function ($) { $.when.all = whenAll; function whenAll(arr) { "use strict"; var deferred = new $.Deferred(), args = !! arr ? $.isArray(arr)? arr: Array.prototype.slice.call(arguments) .map(function (p) { return p.hasOwnProperty("promise") ? p : new $.Deferred() .resolve(p, null, deferred.promise()) }) : [deferred.resolve(deferred.promise())], promises = { "success": [], "error": [] }, doneCallback = function (res) { promises[this.state() === "resolved" || res.textStatus === "success" ? "success" : "error"].push(res); return (promises.success.length + promises.error.length) === args.length ? deferred.resolve(promises) : res }, failCallback = function (res) { // do `error` notification , processing stuff // console.log(res.textStatus); promises[this.state() === "rejected" || res.textStatus === "error" ? "error" : "success"].push(res); return (promises.success.length + promises.error.length) === args.length ? deferred.resolve(promises) : res }; $.map(args, function (promise, index) { return $.when(promise).always(function (data, textStatus, jqxhr) { return (textStatus === "success") ? doneCallback.call(jqxhr, { data: data, textStatus: textStatus ? textStatus : jqxhr.state() === "resolved" ? "success" : "error", jqxhr: jqxhr}) : failCallback.call(data, { data: data, textStatus: textStatus, jqxhr: jqxhr}) }) }); return deferred.promise() };}(jQuery));// returns `Object {// success: Array[], // error: Array[]// }`// e.g.,var request = function (url, data) { return $.post(url, { json: JSON.stringify(data) })}, settings = [ ["/echo/json/", "success1"], // `success` ["/echo/jsons/", "error1"], // `error` ["/echo/json/", "success2"], // `success` ["/echo/jsons/", "error2"], // `error` ["/echo/json/", "success3"] // `success`];$.when.all( $.map(settings, function (p) { return request.apply($, p) })).then(function (data) { console.log(data); // filter , process responses $.each(data, function(key, value) { if (key === "success") { results.append( "rn" + key + ":rn" + JSON.stringify(value, null, 4) ) } else {results.append( "rn" + key + ":rn" + JSON.stringify( value.map(function(v, k) { v.data.responseText = $(v.data.responseText).filter("title, #summary, #explanation").text().replace(/s+/g, " "); return v }) , null, 4) ) } })}, function (e) { console.log("error", e)});jsfiddle
http://jsfiddle.net/guest271314/620p8q8h/



