Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
优雅的javascript——当发生3个不同的AJAX请求时,生成函数_Javascript - Fatal编程技术网

优雅的javascript——当发生3个不同的AJAX请求时,生成函数

优雅的javascript——当发生3个不同的AJAX请求时,生成函数,javascript,Javascript,我有三个不同的AJAX查询,我想访问不同的服务。当它们全部返回(或超时)时,我希望它们调用一个函数 我可以想象有很多方法可以做到这一点,比如当所有的请求都进入时,有一个中间函数计数,但是有一个漂亮的解决方案吗 Hmm,如果最后一个调用的函数完全执行,您可以将布尔值设置为true?但是,如果函数是异步执行的,我想这会造成问题。jQuery允许您做您想做的事情。看 当然,这只在您使用jQuery或可以使用jQuery的情况下才有效。使用jQuery,您可以使用完整的回调轻松地实现这一点 var c

我有三个不同的AJAX查询,我想访问不同的服务。当它们全部返回(或超时)时,我希望它们调用一个函数


我可以想象有很多方法可以做到这一点,比如当所有的请求都进入时,有一个中间函数计数,但是有一个漂亮的解决方案吗

Hmm,如果最后一个调用的函数完全执行,您可以将布尔值设置为true?但是,如果函数是异步执行的,我想这会造成问题。

jQuery允许您做您想做的事情。看


当然,这只在您使用jQuery或可以使用jQuery的情况下才有效。

使用jQuery,您可以使用完整的回调轻松地实现这一点

var checked = 0;

$(function() {
    $.ajax({ url: "1st ajax", complete: function(){ checked++; Check(); }});
    $.ajax({ url: "2nd ajax", complete: function(){ checked++; Check(); }});
    $.ajax({ url: "3rd ajax", complete: function(){ checked++; Check(); }});
}

function Check() {
    if (checked >= 3) {
        // all 3 have been successfully completed or timedout
    }
}
或用于按顺序调用:

$.get("1st ajax").then(function(){ 
    $.get("2nd ajax").then(function(){ 
        $.get("3rd ajax").then(function(){ 
            // call something
        });
    });
});
或者使用
Check()
方法在不等待的情况下调用它们:

$.get("1st ajax").then(function(){ checked++; Check(); });
$.get("2nd ajax").then(function(){ checked++; Check(); });
$.get("3rd ajax").then(function(){ checked++; Check(); });

如果您使用的是jQuery 1.5或更高版本,则可以使用该方法。例如:

$.when($.ajax("/page1.php"),
       $.ajax("/page2.php")).done(function(a1,  a2) {
           /* a1 and a2 are arguments resolved for the 
              page1 and page2 ajax requests, respectively */
           var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
           if ( /Whip It/.test(jqXHR.responseText) ) {
               alert("First page has 'Whip It' somewhere.");
           }
});

否则,请参阅。

是否使用JS库?有没有理由不这样做?您可以使用jquerys函数执行类似的操作。顺便说一句,你可能应该接受一些问题的答案(假设它们是可以接受的),因为人们会更愿意提供帮助。但说真的,尊重/承诺的概念绝对是你想要优雅地做到这一点的目的。这正是我想要的。另外,还没有遇到when和then函数。非常有趣,谢谢大家。