【问题标题】:Is there a better way to serially submit multiple AJAX requests?有没有更好的方法来串行提交多个 AJAX 请求?
【发布时间】:2010-04-11 04:41:18
【问题描述】:

我有一个包含多个表单的页面,我通过 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 ) } );

对于本质上是一个迭代问题的问题,递归给我的印象是一个丑陋的解决方案。有没有更干净或更优雅的方式来处理这个问题?

【问题讨论】:

  • 为什么要一块一块地发送数据?是否有很多类似的东西?
  • @Matti - 每个请求都需要一点时间来处理(需要修改的文件上传)。在单个请求中处理太多了。
  • 迭代和递归并不像它们最初出现的那样不同(stackoverflow.com/questions/931762/…mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2)。由于您正在处理异步回调,因此堆栈增长并不是什么大问题。
  • 我不太担心堆栈大小——只是想看看是否有一种不那么迂回的方式来做同样的事情。

标签: javascript jquery ajax recursion xmlhttprequest


【解决方案1】:

这些请求是幂等的吗?如果是这样,您可以简单地将它们一个接一个地解雇。否则,您会受到 AJAX 的异步特性的限制。

更新

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

【讨论】:

  • +1 不错的发现,为我提出的解决方案提供了具体性
  • 非常酷——我可能最终会使用这个或做类似的事情。
  • 是的,这是一个非常酷的解决方案 :) 我可能最终也会使用它!
【解决方案2】:

一种更简洁的方法是维护一个您想要创建的回调(ajax 请求)队列并逐个触发它们。

【讨论】:

  • 但是在等待队列中的每个请求完成时如何阻塞呢?
  • @friedo:你必须维护一个标志才能做到这一点
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    如果你想做的就是你的代码所做的,那么使用递归结构就可以了。

    但是这里的可疑部分是使用多个调用,您正在浪费大量时间提交多个调用。在一个调用中粘贴所有数据并完成它,如果它以任何方式可能是迄今为止首选的方法。

    【讨论】:

      猜你喜欢
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2010-09-15
      • 2022-01-22
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多