如何使函数等到所有jQuery Ajax请求在另一个函数内完成?
简而言之,我需要等待所有Ajax请求在执行下一个之前完成.但是怎么样?
所以,我有一个加载的页面,并通过jquery.get发出几个请求,用它们的值填充下拉列表.
$(function() {
LoadCategories($('#Category'));
LoadPositions($('#Position'));
LoadDepartments($('#Department'));
LoadContact();
};
Run Code Online (Sandbox Code Playgroud)
然后调用LoadContact(); 这是另一个调用,当它返回时,它会填充表单上的所有字段.问题是通常,下拉列表并非全部填充,因此,它无法将它们设置为正确的值.
我需要做的是,只要其他方法完成并且回调完成执行,LoadContact就会以某种方式执行.
但是,我不想在下拉填充回调的末尾放置一堆标志,然后检查,并且在调用LoadContact()之前必须进行递归的setTimeout调用检查;
jQuery中有什么东西可以让我说,"当所有这些都完成时执行它."?
更多信息 我正在考虑这些问题
$().executeAfter(
function () { // When these are done
LoadCategories($('#Category'));
LoadPositions($('#Position'));
LoadDepartments($('#Department'));
},
LoadContact // Do this
);
Run Code Online (Sandbox Code Playgroud)
...它需要跟踪在执行方法期间发生的ajax调用,并且当它们全部完成时,调用LoadContact;
如果我知道如何拦截在该函数中创建的ajax,我可能会编写一个jQuery扩展来执行此操作.
我的解决方案
;(function($) {
$.fn.executeAfter = function(methods, callback) {
var stack = [];
var trackAjaxSend = function(event, XMLHttpRequest, ajaxOptions) {
var url = ajaxOptions.url;
stack.push(url);
}
var trackAjaxComplete = function(event, XMLHttpRequest, ajaxOptions) {
var url = ajaxOptions.url;
var index = jQuery.inArray(url, stack);
if (index >= 0) …Run Code Online (Sandbox Code Playgroud)