2014-03-27 19 views
2

我有一個大表,我的想法是優化我的程序是逐個獲取信息並在信息到達時更新表。發送多個ajax調用同一個文件

爲此,我正在使用ajax調用一個從數據庫收集數據的php文件。我想通過一個發送和接收數據的一個:

for (var i = depF; i <= depT; i++) { 
     xmlhttp.open("GET", "../../php_includes/reports/InventoryReportPage.php?date=" + arguments[0] + "&depF=" + i + "&depT=" + i + "&subT=" + subT + "&subF=" + subF + "&catT=" + catT 
       + "&catF=" + catF + "&Tar=" + Tar, true); 
     xmlhttp.send(); 
     console.log("sent ajax"); 
    } 

這個代碼將正確發送2次Ajax調用(在瀏覽器中,我可以看到兩個「發送AJAX」)。但在接收器中:

xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState === 4 && xmlhttp.status === 200) 
     { 
      console.log("recieved"); 
      if (xmlhttp.responseText) { 
       var table = document.getElementById("inventoryReport"); 
       table.innerHTML += xmlhttp.responseText; 
      } 
     } 
    } 

我只看到一個返回值。任何想法,如果我甚至被允許使用這樣的ajax調用?

的整體功能:

var isClicked = false; 
function onClick(date, depF, depT, subF, subT, catT, catF, Tar) { 
//alert(date+ depF+ depT+ subF+ subT+ catT+ catF+ Tar) 
// return null; 
if (!isClicked) { 
    console.log("in the function"); 
    var clicked = arguments[0]; 
    isClicked = true; 
    var div = clicked + "apDiv"; 
    var browserSupport = (navigator.userAgent.indexOf('Firefox') != -1) || ((navigator.userAgent.indexOf('Chrome') != -1) || (navigator.userAgent.indexOf('Safari') != -1)); 
    if (browserSupport) { 

     var xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

    } 
    if (!xmlhttp) { 
     alert("your browser doens't supposrt XMLHTTP " + navigator.userAgent); 
    } 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState === 4 && xmlhttp.status === 200) 
     { 
      console.log("recieved: "+xmlhttp.responseText); 
      if (xmlhttp.responseText) { 
       var table = document.getElementById("inventoryReport"); 
       table.innerHTML += xmlhttp.responseText; 
      } 
     } 
    } 
    for (var i = depF; i <= depT; i++) { 
     xmlhttp.open("GET", "../../php_includes/reports/InventoryReportPage.php?date=" + arguments[0] + "&depF=" + arguments[1] + "&depT=" + arguments[2] + "&subT=" + subT + "&subF=" + subF + "&catT=" + catT 
       + "&catF=" + catF + "&Tar=" + Tar, true); 
     xmlhttp.send(); 
     console.log("sent the ajax"); 
    } 
} 
} 
+0

您可以反覆折騰,使這項工作,或者你可以使用jQuery,它使AJAX調用和處理簡單的工作。 –

+0

你需要創建一個xmlhttp對象「新」 – ZiTAL

+0

我想解決這個代碼。還有一件事我意識到:如果我看看我的網絡,我看到其他請求狀態被取消。這是我需要在服務器中配置的東西嗎? – kousha

回答

2

因爲你希望你的代碼不工作的原因是,你基本上覆蓋你正在做的請求。你可以嘗試這樣的事情:

var reqs = []; 

for (var i = depF; i <= depT; i++) { 
    var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("GET", "/", true); 
     xmlhttp.send(); 

     reqs.push(xmlhttp); 
} 

reqs.forEach(function(req) { 
    req.onreadystatechange = function() 
    { 
     if (req.readyState === 4 && req.status === 200) 
     { 
      console.log("recieved"); 
      if (req.responseText) { 
       var table = document.getElementById("inventoryReport"); 
       table.innerHTML += req.responseText; 
      } 
     } 
    } 
})