等待Ajax调用完成

等待Ajax调用完成,ajax,jquery,Ajax,Jquery,在这种情况下,我使用jquery进行了大量AJAX调用,然后将这些调用中的JSON数据返回到页面上的一些变量中。 问题是Ajax调用需要一点时间来处理,同时我的控制权转移到下一个语句,我打算在那里使用Ajax调用的输出。 由于调用需要时间来返回数据,因此留下的空对象使我的函数失败。 有没有什么方法可以让我等待AJAX调用完成,并且只在调用返回结果时才继续 这是我的代码,在这里,我试图将TransactionMatError返回到另一个jquery文件,在这个调用执行之前,控制转移到下一个语句 t

在这种情况下,我使用jquery进行了大量AJAX调用,然后将这些调用中的JSON数据返回到页面上的一些变量中。 问题是Ajax调用需要一点时间来处理,同时我的控制权转移到下一个语句,我打算在那里使用Ajax调用的输出。 由于调用需要时间来返回数据,因此留下的空对象使我的函数失败。 有没有什么方法可以让我等待AJAX调用完成,并且只在调用返回结果时才继续

这是我的代码,在这里,我试图将TransactionMatError返回到另一个jquery文件,在这个调用执行之前,控制转移到下一个语句

this.GetTransactionAtErrors = function (callback) {
        var transactionsAtError;
        $.ajax({
            url: ('/Management/GetTransactionsAtError'),
            type: 'POST',
            cache: false,
            success: function (result) {
                if (result && callback) {
                    transactionsAtError = (typeof (result) == "object") ? result : $.parseJSON(result);
                }
            }
        });
        return transactionsAtError;
    }

假设您使用的是jQuery函数,那么您可以提供一个回调函数,该函数将在从服务器返回数据后执行

例如:

$.getJSON("http://example.com/get_json/url", function(data){
    console.log("the json data is:",data);
});
this.GetTransactionAtErrors = function (callback) {
    $.ajax({
        url: ('/Management/GetTransactionsAtError'),
        type: 'POST',
        cache: false,
        success: function (result) {
            if (result && callback) {
                var transactionsAtError = (typeof (result) == "object") ? result : $.parseJSON(result);
                callback(transactionsAtError);
            }
        }
    });
}
编辑

看到你添加的代码后,我可以看出你有什么问题

您的
返回交易资料错误行独立于ajax调用运行,即它将在ajax完成之前运行

您应该在success:函数中调用回调函数

例如:

$.getJSON("http://example.com/get_json/url", function(data){
    console.log("the json data is:",data);
});
this.GetTransactionAtErrors = function (callback) {
    $.ajax({
        url: ('/Management/GetTransactionsAtError'),
        type: 'POST',
        cache: false,
        success: function (result) {
            if (result && callback) {
                var transactionsAtError = (typeof (result) == "object") ? result : $.parseJSON(result);
                callback(transactionsAtError);
            }
        }
    });
}

当您的结果在范围内时,您可以使用es6 promise检查是否等待ongoin ajax调用完成:

function ajaxwait()
{
    return(new Promise(function(resolve, reject) {        
    var i = setInterval(function() { 
        if(jQuery.active == 0) {
            resolve();
            clearInterval(i);
        }
    }, 100);        
    }));    
}
你可以像这样使用它

ajaxwait().then(function(){ /* Code gets executed if there are no more ajax calls in progress */ });

使用像这样的es6垫片,使其在较旧的浏览器中工作。

频繁重复。可以吗?因为这是一个常见的问题,请注意告诉您使用async:false的答案从来都不好,现在已经完全过时了。您能更具体地说明回调的位置吗?我在学习jquery,而不是一个专家。这是我在没有看到完整代码的情况下所能得到的最具体的信息。您需要使用jQuery的一个ajax函数($.ajax(),$.post(),$.getJSON())。传递给所有这些函数的类型函数的最后一个参数是回调函数。请参阅编辑后的答案,在本例中,您只需在请求得到服务后启动回调函数。