Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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 有没有更好的方法可以串行提交多个AJAX请求?_Javascript_Jquery_Ajax_Recursion_Xmlhttprequest - Fatal编程技术网

Javascript 有没有更好的方法可以串行提交多个AJAX请求?

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

我有一个包含多个表单的页面,可以通过Ajax连续提交。起初,我尝试使用同步XHR请求,但这会导致浏览器在请求期间锁定,并破坏我的DOM操作效果,这是不可接受的。所以我最终使用的模式基本上是这样的:

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很好,使我提出的解决方案具体化非常酷--我可能会使用这个或做类似的事情。是的,这是一个非常酷的解决方案:)我可能也会使用它!