jQuery同步非阻塞ajax调用
在我的web应用程序中,我有一系列快速启动的ajax调用。在服务器上,需要按照与从客户端发送的顺序相同的顺序处理这些数据 我一直在使用jQuery中的jQuery同步非阻塞ajax调用,jquery,ajax,asynchronous,nonblocking,Jquery,Ajax,Asynchronous,Nonblocking,在我的web应用程序中,我有一系列快速启动的ajax调用。在服务器上,需要按照与从客户端发送的顺序相同的顺序处理这些数据 我一直在使用jQuery中的async:false配置来实现这一点。但是,这会导致GUI变得非常缓慢,同时会阻止调用完成。使用async:true时,GUI会做出响应,但请求并不总是按顺序处理 是否有其他非阻塞方式来排队ajax请求,以便只在前一个请求完成后发送下一个请求 注意:我没有要处理的请求的“列表”。请求是动态生成的,因此在生成请求时,我需要能够将它们塞进某种FIFO
async:false
配置来实现这一点。但是,这会导致GUI变得非常缓慢,同时会阻止调用完成。使用async:true
时,GUI会做出响应,但请求并不总是按顺序处理
是否有其他非阻塞方式来排队ajax请求,以便只在前一个请求完成后发送下一个请求
注意:我没有要处理的请求的“列表”。请求是动态生成的,因此在生成请求时,我需要能够将它们塞进某种FIFO队列中,然后通过一些进程使用队列。这可以通过以下方式轻松完成: 或
您可以在前一个任务完成后调用每个任务。我认为
done
可以有参数.done(函数(a1,a2){…})
@Sheikh Heera:是的,但我不知道如何为所有延迟任务执行该操作(以防我们将它们链接起来,而不是同时运行)。如果我们只在secondAjax
OK中手动传递参数
,问题是我没有“拥有”这个过程开始时我将要进行的所有调用…@pimvdb:看看上面的评论:“好的,问题是我没有”这个过程开始时我将要进行的所有调用”-所以OP没有在一个地方进行所有延迟,因此,他需要能够添加管道请求(这实际上就是为什么我没有使用单个$。when()
啊,我很抱歉。(我想用$来包装第一个调用。when
不是很有用。)
function firstAjax() {
return $.ajax({...});
}
function secondAjax() {
return $.ajax({...});
}
firstAjax().pipe(secondAjax).pipe(...).done(function() {
alert('all requests have successfully finished');
});
$.when(firstAjax()).pipe(secondAjax).pipe(...).done(function() {
alert('all requests have successfully finished');
});