【问题标题】:Javascript XMLHttpRequests in Loop?循环中的Javascript XMLHttpRequest?
【发布时间】:2010-06-14 08:16:56
【问题描述】:

我正在尝试将一组记录保存到 mysql 数据库中,但除了最后一次保存之外,我总是在 firebug 中收到中止消息。如何使用 XMLHttpRequest 的循环保存记录?这是我的代码:

function savingContent()
{
   if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();

   }
   else
   {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }

   var rowindex = 0;

   for (x in globalObj.AddedRows)
   {
      var rowData = "?q=" + globalObj.AddedRows[rowindex];

      xmlhttp.open("POST", "insertRowData.php"+rowData, true);
      xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
      xmlhttp.setRequestHeader("Content-Length",rowData.length); 
      xmlhttp.send(null);
      rowindex += 1;
}

【问题讨论】:

  • 如果您感谢我们的帮助,请为您认为有帮助的任何答案投票,并接受您最喜欢的答案。否则以后人们就懒得回答你的问题了。

标签: javascript loops xmlhttprequest


【解决方案1】:

这段代码有很多问题。以下是我找到的第一批:

  1. for (x in object) 语法只应在您想要遍历对象中的所有字段时使用。在这种情况下,你想遍历一个数组,所以你应该这样做:

    for (var rowindex = 0; rowindex < globalObj.AddedRows.length; rowindex++) {
    }
    
  2. 在进行 HTTP POST 时,不应将要更改的数据放入 URL。将它放在请求的正文中 - 作为 xmlhttp.send() 的参数。您实际上是在显式传递内容长度 - 该长度应该是您传递给 xmlhttp.send() 的数据的长度 - 所以通过传递 NULL 这几乎可以肯定是您的主要错误。

  3. 与其使用 Firebug,不如使用 xmlhttp.onreadystatechange 来确定您的请求是成功还是失败。不要以为一旦你第一次调试它,它就会永远成功。处理错误。

【讨论】:

    【解决方案2】:

    除了 dmazzoni:

    每次你的 for 循环发送一个异步 xml 请求时,它都会覆盖前一个请求,因此前一个请求被中止。在发送新请求之前,您应该在 for 循环中创建一个新的 XMLHttpRequest(或 IE 的 ActiveXObject)或等待 HTTP 返回调用。

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2015-09-18
      • 1970-01-01
      相关资源
      最近更新 更多