2011-12-23 41 views
-2

我遇到了我正在處理的AJAX函數的問題。使用帶循環的AJAX

該函數應該將一些信息插入到數據庫中。當我把整個AJAX代碼放入一個循環時,問題就出現了,因爲它崩潰了。下面是我在做什麼這是類似的代碼示例:

function funcionDePrueba() { 
    var url = 'aaajax.py' 
    var x = 3 
    for (i = 0; i < x; i++) { 
     xmlhttp = GetXmlHttpObject(); 
     if (!xmlhttp) { 
      alert("Browser does not support HTTP Request"); 
      return; 
     } 
     var xml = xmlhttp; 
     xmlhttp.onreadystatechange = function() { 
      if (xml.readyState == 4) { 
       alert(claveProyecto); 
      } 
     }; 
     xmlhttp.open("GET", url, true); 
     xmlhttp.send(null); 

     return true; 
    } 
} 

是否有可能把整個AJAX代碼for循環內?

+3

請詳細說明「它崩潰」。提出的例外是什麼?如果沒有進一步的信息,將引發異常描述爲「錯誤」和「崩潰」對於軟件開發人員來說是不夠的,尤其是尋求幫助的人。 – 2011-12-23 23:44:30

回答

5

是的,這是可能的。

但是;在提供的摘錄中,您的for -loop內有一個return聲明。這將使循環有一次,然後從函數返回。如果您希望做到多次迭代,請刪除語句:return true

+0

感謝,這就是問題所在!只有其他問題,我必須將回報放在外面嗎?或者我可以忽略它,不要放在任何地方? – mauguerra 2011-12-23 23:49:10

+0

@mauguerra如果函數不應該返回任何東西,你可以一起忽略它。 (即,如果你不需要返回任何東西,不要)。 – 2011-12-23 23:57:07

+0

如果你省略'return'語句,你的函數將返回'undefined'。這很好,因爲你不期待返回值。 – PPvG 2011-12-24 00:01:02

1

除了REFP的答案,我想指出以下幾點:

你不給他們分配值之前宣佈ixmlhttpvar秒。如果您未聲明var,則其範圍爲全局變量(在window對象上)。這很可能是而不是你正在嘗試做什麼,因爲這意味着ixmlhttp將在之外之後被調用。

這可能是你想要做什麼:

function funcionDePrueba(iterations) { 
    var url = 'aaajax.py'; 
    var xmlhttp; 
    var i; 

    for (i = 0; i < iterations; i++) { 
     // [...] 
    } 
} 

注意var聲明爲xmlhttpi。此外,硬編碼x(迭代次數)可能不是一個好主意。您可以將其作爲參數,如上例所示。