Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何处理几个ajax请求?_Jquery_Ajax_Callback_Jquery Deferred - Fatal编程技术网

Jquery 如何处理几个ajax请求?

Jquery 如何处理几个ajax请求?,jquery,ajax,callback,jquery-deferred,Jquery,Ajax,Callback,Jquery Deferred,我的脚本需要处理几个ajax请求。以下是一个简化版本: function request(variable){ $.ajax({ // call config }).done(function(data){ // treatment of returned data // returning TRUE (ok) or FALSE (errors) }).fail(function(e){ // generat

我的脚本需要处理几个ajax请求。以下是一个简化版本:

function request(variable){
    $.ajax({
        // call config
    }).done(function(data){
        // treatment of returned data
        // returning TRUE (ok) or FALSE (errors)
    }).fail(function(e){
        // generating error message
    });
}
我需要打几个电话:

request(variableA);
request(variableB);
request(variableC);
请求是同时执行的,并且运行良好,但我不知道过程何时完成。我不能显示返回的值

一些讨论建议使用when()

使用此代码,警报似乎在流程的最开始执行,而不是等待完成


我最好的选择是什么?

更改
请求
返回承诺

function request(variable){
    return $.ajax({
        // call config
    }).done(function(data){
        // treatment of returned data
        // returning TRUE (ok) or FALSE (errors)
    }).fail(function(e){
        // generating error message
    });
}

更改
请求
以返回承诺

function request(variable){
    return $.ajax({
        // call config
    }).done(function(data){
        // treatment of returned data
        // returning TRUE (ok) or FALSE (errors)
    }).fail(function(e){
        // generating error message
    });
}
这些request()调用无论如何都会立即返回,因为它们是异步的(因此在AJAX中是A)。要将请求链接在一起,并且在全部完成后才执行某些操作,您必须让单个ajax调用的成功处理程序增加一个计数器,然后仅在计数器到达某个点时调用“继续”代码。e、 g

var alert_counter = 0;
function request('blahblah', alert_when_reached) {
$.ajax({
     success: function() { 
        alert_counter++;
        if(alert_when_reached >= alert_counter) {
           proceed_onwards();
        }
     });
这并不是说它能按原样工作,而是应该给你一个想法。如果您需要调用3个并行请求,则将
3
传递给这些请求中的每一个,当第三个结果最终出现时,成功处理程序的特定实例将调用允许代码继续执行的任何函数

一些次要的增强是为成功处理程序定义一个闭包并将其传递到request()函数,这样您就不会有硬编码的“继续”函数调用,但这超出了本回答的范围。

这些request()调用无论如何都会立即返回,因为它们是异步的(因此在AJAX中是A)。要将请求链接在一起,并且在全部完成后才执行某些操作,您必须让单个AJAX调用的成功处理程序增加一个计数器,然后仅在计数器到达某个点时调用“继续”代码

var alert_counter = 0;
function request('blahblah', alert_when_reached) {
$.ajax({
     success: function() { 
        alert_counter++;
        if(alert_when_reached >= alert_counter) {
           proceed_onwards();
        }
     });
这并不是说它可以按原样工作,而是应该给你一个想法。如果你需要调用3个并行请求,你将
3
传递给每个请求,当第三个结果最终出现时,成功处理程序的特定实例将调用任何函数,让你的代码继续运行


一些次要的增强是为成功处理程序定义一个闭包并将其传递到request()函数中,这样您就不会有硬编码的“继续”函数调用,但这超出了这个答案的范围。

只是为了澄清,这样做将使您的代码使用
$。当
正常工作时:)只是为了澄清,这样做将使您的代码使用
$。当
正常工作时:)感谢您的帮助。事实上,我正转向相反的解决方案,因为我无法理解延迟的对象,从这个角度来看,你的解决方案是有效的。然而,我更喜欢使用穆萨的选择;使用jQuery,它更轻、更优化。感谢您的支持。事实上,我正转向相反的解决方案,因为我无法理解延迟的对象,从这个角度来看,你的解决方案是有效的。然而,我更喜欢使用穆萨的选择;使用jQuery,它更轻、更优化。