相关疑难解决方法(0)

等到所有jQuery Ajax请求都完成了?

如何使函数等到所有jQuery Ajax请求在另一个函数内完成?

简而言之,我需要等待所有Ajax请求在执行下一个之前完成.但是怎么样?

javascript ajax jquery

644
推荐指数
8
解决办法
51万
查看次数

在继续之前等待多个异步调用完成

所以,我有一个加载的页面,并通过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)

javascript jquery asynchronous callback

55
推荐指数
3
解决办法
4万
查看次数

标签 统计

javascript ×2

jquery ×2

ajax ×1

asynchronous ×1

callback ×1