Javascript 有没有更好的方法可以串行提交多个AJAX请求?
我有一个包含多个表单的页面,可以通过Ajax连续提交。起初,我尝试使用同步XHR请求,但这会导致浏览器在请求期间锁定,并破坏我的DOM操作效果,这是不可接受的。所以我最终使用的模式基本上是这样的:Javascript 有没有更好的方法可以串行提交多个AJAX请求?,javascript,jquery,ajax,recursion,xmlhttprequest,Javascript,Jquery,Ajax,Recursion,Xmlhttprequest,我有一个包含多个表单的页面,可以通过Ajax连续提交。起初,我尝试使用同步XHR请求,但这会导致浏览器在请求期间锁定,并破坏我的DOM操作效果,这是不可接受的。所以我最终使用的模式基本上是这样的: var fcount = 0; // incremented for each form to be submitted function submit_form( num ) { var fdata = { ... }; // data from form # num $.a
var fcount = 0; // incremented for each form to be submitted
function submit_form( num ) {
var fdata = { ... }; // data from form # num
$.ajax( { async: true,
url: '/index.cgi',
data: fdata,
type: 'POST',
success: function() {
if ( num < fcount ) {
submit_form( ++num );
}
}
} );
}
$( '#submit_form_btn' ).click( function() { submit_form( 1 ) } );
var fcount=0;//对于要提交的每个表单,递增
函数提交表单(num){
var fdata={…};//来自表单#num的数据
$.ajax({async:true,
url:“/index.cgi”,
数据:fdata,
键入:“POST”,
成功:函数(){
如果(num
递归给我的印象是,对于本质上是一个迭代问题,它是一个丑陋的解决方案。是否有一种更干净或更优雅的方法来处理此问题?更干净的方法是维护一个您想要进行的回调(ajax请求)队列,并逐个启动它们。这些请求是幂等的吗?如果他们是你可以简单地把他们一个接一个地发射出去。否则,您会受到AJAX异步特性的限制 更新
我做了更多的研究,显然存在一个名为的框架,它通过消息队列处理串行AJAX请求。也许这可以帮你解决问题。我会说,提高服务器上脚本的超时时间,并在一篇文章中发送所有内容 如果您想做的是您的代码所做的,那么使用递归结构就可以了
但是这里可疑的部分是使用多个呼叫,您提交多个呼叫是在浪费大量时间。在一次调用中粘贴所有数据并完成,如果可能的话,这是目前首选的方法。为什么要逐段发送数据?有很多这样的请求吗?@Matti-每个请求都需要一点时间来处理(需要屏蔽的文件上传)。在一个请求中处理太多了。迭代和递归并不像它们第一次出现时那样不同(,)。因为您处理的是异步回调,所以堆栈增长不太重要。我不太担心堆栈的大小——只是想看看是否有一种不太迂回的方法来做同样的事情。但是,在等待队列中的每个请求完成时,您如何进行阻止?@friedo:您必须维护一个标志才能做到这一点+1很好,使我提出的解决方案具体化非常酷--我可能会使用这个或做类似的事情。是的,这是一个非常酷的解决方案:)我可能也会使用它!