在另一个 ajax 成功中调用 jquery ajax 的问题

Issue to invoke jquery ajax within the another ajax success

本文关键字:ajax jquery 调用 问题 另一个 成功      更新时间:2023-09-26

我在ajax成功函数中有以下代码。

$.each(data,function(index,element){                            
$.ajax({                
            type: 'GET',                    
            url: "http://192.168.1.56/SampleAjaxCall/sample.svc/sampleFunciton",                    
            contentType: 'application/json; charset=utf-8',
            dataType: 'jsonp',
            async: false,
            success:function(response){ 
                    alert("Success !");   // invokes after the loop     
            }           
        }); 
        alert("After the ajax call");     // invokes first
});

首先,我在ajax调用后收到此警报消息。 循环结束后,我收到此警报消息警报("成功!因此,ajax 是在循环结束后调用的。所以我需要先调用 ajax。如何实现此方案。

实际上,您的 ajax 调用实际上是在第二条警报消息之前调用的(" ajax 调用之后")。但是,由于 AJAX 代表异步等,在处理 ajax 请求时,脚本的其余部分已经执行。因此,如果您希望在 ajax 调用后执行代码,请将其包装在一个函数中,并在成功块中调用该函数(或者只是将代码移动到成功回调中)。例:

var after_call_func = function() {
    alert("After the ajax call");
};
$.each(data,function(index,element){                            
    $.ajax({                
        // your ajax configuration
        success:function(response){ 
            alert("Success !");
            after_call_func(); // call the function when ajax is complete
        }           
    });
});

编辑

我现在注意到您将async选项设置为 false ,这很可能就是您希望警报首先在 ajax 调用后执行的原因......但是,正如jQuery文档告诉我们的那样:

跨域请求和数据类型:"jsonp"请求不支持同步操作。

看起来你两者都有...因此,要么不使用 jsonp 数据类型,也不要使用跨域请求,要么将要在 ajax 调用后执行的代码包装在成功块中,如上例所示。

根据 jQuery.ajax 文档,dataType: "jsonp"请求不支持同步操作,因此async: false不起作用。你需要按照乔治的描述去做。