Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequests在循环中?_Javascript_Loops_Xmlhttprequest - Fatal编程技术网

Javascript XMLHttpRequests在循环中?

Javascript XMLHttpRequests在循环中?,javascript,loops,xmlhttprequest,Javascript,Loops,Xmlhttprequest,我试图将一组记录保存到mysql数据库中,但除了最后一次保存外,我总是在firebug中收到中止消息。如何使用XMLHttpRequest循环保存记录?这是我的密码: function savingContent() { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {//

我试图将一组记录保存到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;
}

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

  • (对象中的x)的
    语法仅当您希望迭代对象中的所有字段时才应使用。在这种情况下,您希望在数组上进行迭代,因此您应该这样做:

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

  • 与其使用Firebug,不如使用xmlhttp.onreadystatechange来确定哪些请求成功或失败。不要以为一旦你第一次调试了它,从那时起它就会成功。处理错误


  • 这段代码有很多问题。以下是我发现的第一批:

  • (对象中的x)的
    语法仅当您希望迭代对象中的所有字段时才应使用。在这种情况下,您希望在数组上进行迭代,因此您应该这样做:

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

  • 与其使用Firebug,不如使用xmlhttp.onreadystatechange来确定哪些请求成功或失败。不要以为一旦你第一次调试了它,从那时起它就会成功。处理错误


  • 除dmazzoni外:


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

    除了dmazzoni:


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

    如果您感谢帮助,请对您认为有帮助的任何答案进行投票,并接受您最喜欢的答案。如果你感谢你的帮助,请在你认为有帮助的任何答案上投票,并接受你最喜欢的答案。否则人们以后就不会费心回答你的问题了。