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

时间:2010-04-10 20:24:44

标签: javascript jquery ajax recursion xmlhttprequest

我有一个包含多个表单的页面,我通过串行方式通过Ajax POST提交。起初,我尝试使用同步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 ) } );

递归让我觉得这是一个基本上是迭代问题的丑陋解决方案。是否有更清洁或更优雅的方式可以处理?

4 个答案:

答案 0 :(得分:10)

这些请求是幂等的吗?如果他们是你可以简单地一个接一个地解雇他们。否则你会受到AJAX异步性质的限制。

<强>更新

我做了更多的研究,显然存在一个名为jQuery Message Queuing的框架,它通过消息队列来处理串行AJAX请求。也许这可以帮到你。

答案 1 :(得分:1)

更简洁的方法是维护一个你想要制作的回调(ajax请求)队列并逐个解雇它们。

答案 2 :(得分:0)

我想说在服务器上提高脚本的超时时间并在一个POST中发送所有内容。

答案 3 :(得分:0)

如果您想要做的是您的代码所做的事情,那么使用递归结构就好了。

但这里的可疑部分是使用多个电话,你浪费了很多时间提交多个电话。将所有数据粘贴在一个调用中,如果以任何可能的方式将其结束,则将其作为首选方法。