Jquery 如何处理几个ajax请求?
我的脚本需要处理几个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
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,它更轻、更优化。