2013-01-15 209 views
3

我是新來的ajax。我有一個函數來插入項目列表到SQL使用PHP頁面,但它只插入最後一項。請看下面的代碼:如何發送多個Ajax請求?

function submitItems() { 
    ... 
    xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     if (xmlhttp.responseText != "Item Sold") 
      alert(xmlhttp.responseText); 
     } 
    } 
    for (i=0;i<rows.length;i++) {//a loop to send multiple requests 
     xmlhttp.open("POST","submitItem.php?itemid="+itemid,true); 
     xmlhttp.send(); 
    } 
} 

該循環發送請求到一個php頁面,插入,但只處理最後一個請求。如果我在循環內部放置一個alert(),它每次都會彈出一個窗口,並且每個項目都被插入,但是,不斷彈出窗口很煩人。其他解決方案?

  • 或者,作爲第一個回覆說,我只發送一個請求與一個數組存儲列表如果項目。但我不知道如何傳遞數組作爲參數。我可以這樣做嗎?

    var items = new array(); items.push(itemid); 。 。 。 。 items.push(itemid); //然後只發送它? xmlhttp.open(「POST」,「submitItem.php?items =」items,true); xmlhttp.send();

然後在php文件中,我應該這樣做嗎?

$items = $_GET['items']; 
+0

每個循環迭代都會覆蓋剛剛在上一次迭代中開始的正在進行的HTTP會話。你的'警報'延遲這個過程足以(有時)使會話完成。 –

+0

我可以想象得到。我嘗試使用setTimeout來延遲發送請求,它不起作用... –

回答

3

使用for循環生成的項目的數組(按不同itemid s轉換在每次迭代的數組),然後進行一次完整的AJAX調用中,你將插入的所有項目到數據庫。這種方式也將優化您的網站並節省您的帶寬。

+0

這就是我想要做的。但不知道如何傳遞數組作爲參數,以及如何在PHP中獲取它。你能解釋一下嗎? –

+0

您可以隨時使用JSON('JSON.stringify(yourAssocArray);'),然後在您的AJAX頁面上對其進行解碼。參見[this](http://stackoverflow.com/questions/299610/how-can-i-send-an-array-to-php-through-ajax)。 – Shomz