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