我需要进行一系列 (1-20) ajax 调用,并且我需要在它们全部完成后调用另一个函数。我所说的完成是指调用 $.ajax({ complete: ...}) 时。
我研究过使用 $.when,但在 jsfiddle 上摆弄它之后我遇到了 2 个问题。 1. $.then 和 $.done 在我所有的完整回调之前被调用。 2. 如果一个 ajax 调用失败,则根本不会调用它。 基本上,似乎 $.done 是在成功时调用的,而不是完成的。
我认为一定有一些好的 ajax 管理器/队列可以处理这类事情。或者甚至可能是一些通用的异步任务处理问题.. ;)
fiddle :http://jsfiddle.net/zvSgX/2
最佳答案
如果您不喜欢 $.ajax
的默认 jQuery 选择
调用解析它们的延迟对象,您可以编写自己的包装器;
var my_ajax = function (options) {
var deferred = $.Deferred();
var user_complete = options.complete;
options.complete = function (jqXHR, textStatus) {
if (user_complete) user_complete(jqXHR, textStatus);
deferred.resolve();
};
$.ajax(options);
return deferred.promise();
};
这是一个fork of your JSFiddle演示它与你的行动 示例代码。
由于 my_ajax
从未调用过 deferred.reject()
,因此将 .fail
链接到 $.when
如果 $.when
的所有参数都是 my_ajax
调用,则将毫无意义。
希望对您有所帮助!如果我能澄清任何事情,请告诉我。
关于javascript - 当一系列 jquery ajax 调用完成时执行一个函数(!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11030946/