多个异步jQuery AJAX POST同时返回

时间:2012-04-07 01:42:14

标签: ajax jquery jquery-plugins

我正在用PHP开发一个应用程序,在某些时候,应用程序必须进行多个AJAX POST(每个都返回少量的HTML)。每个POST都必须在div中插入返回的HTML。我没有遇到这个问题,但是当我立刻启动所有AJAX POST时(问我说我开始10),问题出现了,我为每个POST指定了一个单独的div。因为它们都是异步的并且它们都在几乎相同的时间返回所有HTML最终都在一个div中,而不是每个单独的div。我会发布一些代码来澄清。这是我的'apiCall'功能的精简版:

xhr = $.ajax({
    type: "POST",
    url: "../api.php",
    dataType: "json",
    data: data,
    success: function(data) {
      obj.html(data.D['html']);
    }
});

这是问题发生的成功函数。 data.D ['html']包含来自POST的HTML,但我认为它会被下一个AJAX POST覆盖,这就是为什么我所看到的是最后返回的AJAX POST被放入div中(这是jQuery的一部分)我写的插件,obj是传入的div)我称之为:

$("#container).apiCall({options...});

任何人都可以提供一个解决方案,以便当这些AJAX POST返回时,我可以将来自该特定POST的返回数据放入正确的div中吗?

1 个答案:

答案 0 :(得分:3)

你这样做了几次,你总是指的是同一个obj。 在此期间,你正在覆盖你的obj。

当设置所有ajax函数并且响应开始到达(并且回调开始运行)时,所有obj引用都指向obj的最后一个值。

使用闭包将其保存在另一个变量中(在本例中为myObj):

xhr = (function(){
  var myObj = obj;
  return $.ajax({
      type: "POST",
      url: "../api.php",
      dataType: "json",
      data: data,
      success: function(data) {
        myObj.html(data.D['html']);
      }
  });
})();

不是将$ .ajax()直接返回到xhr,而是创建一个匿名函数并立即调用它:( function(){ /* code */ } )()

该函数将“备份”obj转换为myObj(匿名函数的本地变量),然后简单地返回$ .ajax()返回的内容。

我没有测试这段代码。告诉我是否有任何错误。