2013-03-11 111 views
0

我有點瘋狂,試圖理解爲什麼這會輸出一次json數據,然後不再按照超時函數。我究竟做錯了什麼?爲什麼AJAX settimeout不起作用?

<script type="text/javascript"> 
var myTimer =0; 
function ajax_get_json(){ 
var results = document.getElementById("results"); 
var hr = new XMLHttpRequest(); 
hr.open("POST", "ballJson.php",true); 
hr.setRequestHeader("Content-type", "application/json"); 
hr.onreadystatechange = function() { 
    if(hr.readyState == 4 && hr.status == 200) { 
     var data = JSON.parse(hr.responseText); 
     results.innerHTML = ""; 
     for(var obj in data){ 
      results.innerHTML += data[obj]+"<br />"; 
     } 
    } 
} 
hr.send(null); 
results.innerHTML = "requesting..."; 
myTimer = setTimeout('ajax_get_json()',10000); 
} 
</script> 

回答

3

我認爲你要使用的setInterval功能setTimeout只執行一次。

也更喜歡使用setTimeout(function() { ajax_get_json(); }, 10000)setTimeout(ajax_get_json, 10000)而不是使用被評估爲函數回調的字符串。

另請注意,ajax請求可能隨時完成,因此它不會每隔10秒使用setInterval完成一次。您也可以撥打onreadystatechange回撥中的setTimout來鏈接呼叫。

+0

謝謝,我不是我跟着你爲什麼rec setInterval,然後所有的例子使用setTimeout? – Gamemorize 2013-03-11 01:29:04

+0

@Gamemorize取決於你想做什麼;我已經描述了兩個用例,並給了你兩個選項,所以你選擇哪一個最好 – 2013-03-11 01:29:56