代码之家  ›  专栏  ›  技术社区  ›  friedo

有没有更好的方法连续提交多个ajax请求?

  •  3
  • friedo  · 技术社区  · 14 年前

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

    在我看来,递归对于本质上是一个迭代问题的解决方案有点难看。有没有更干净或更优雅的方法来处理这个问题?

    4 回复  |  直到 14 年前
        1
  •  10
  •   Vivin Paliath    14 年前

    这些请求是等幂的吗?如果是的话,你可以一个接一个地把它们烧掉。否则您会受到ajax异步特性的限制。

    更新

    我做了更多的研究,显然有一个框架叫做 jQuery Message Queuing 它通过消息队列处理串行ajax请求。也许这能帮到你。

        2
  •  1
  •   Mahesh Velaga    14 年前

    一个更干净的方法是维护一个要发出的回调队列(ajax请求),并逐个触发它们。

        3
  •  0
  •   ChaosPandion    14 年前

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

        4
  •  0
  •   aaaaaaaaaaaa    14 年前

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

    但这里可疑的部分是使用多个呼叫,您在提交多个呼叫时浪费了大量时间。把所有的数据都保存在一个调用中,如果有可能的话,那就是首选的方法。