2010-06-14 66 views
0

我想將一個記錄數組保存到mysql數據庫中,但我總是在螢火蟲中得到中止消息,除了最後一次保存。如何使用XMLHttpRequest的循環保存記錄?這裏是我的代碼:Javascript XMLHttpRequests在循環?

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; 
} 
+0

如果您感謝您的幫助,請注意您認爲有幫助的任何答案,並接受您的最愛。否則,人們不會在將來回答你的問題。 – dmazzoni 2010-06-16 17:34:54

回答

3

這個代碼有很多問題。這裏只是我找到了第一批:

  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來確定哪些請求成功或失敗。不要以爲第一次調試完成後,它就會一直成功。處理錯誤。

+0

thx評論。啊哈! – user366121 2010-06-15 10:26:49

0

除了dmazzoni:

您的每一次for循環發送異步XML請求它將覆蓋以前的要求,因此,前一個被中止。您應該在for循環中創建一個新的XMLHttpRequest(或IE的ActiveXObject),或者在發送新的請求之前等待HTTP返回調用。

+0

啊!接得好。 – dmazzoni 2010-06-14 15:56:35

+0

thx。是的,它現在有效。 – user366121 2010-06-15 10:27:24