2014-10-12 101 views
1
function chatUpdate() { 
    var xmlhttp = new XMLHttpRequest(); 
    var url = document.URL + '&action=update'; 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       var myArr = JSON.parse(xmlhttp.responseText); 
       alert(myArr); 
     } 
    } 

    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

setInterval(chatUpdate(), 1000); 

此代碼每3秒更新一次聊天。它警告myArr正確(我只是提醒它出於調試目的),但只是一次 - 頁面加載時(但我需要它每3秒),雖然調用了setInterval。如何多次調用函數? (在setInterval())

我認爲問題是(必須是)onreadystatechange/readyState在第一次請求後沒有更新。我努力嘗試,但沒有成功。

請幫助

+0

http://stackoverflow.com/questions/13574882/multiple-xmlhttprequests-every-x-seconds – 2014-10-12 14:17:05

+0

這個問題已經被問數十次已經在SO。僅舉一例,請參閱http://stackoverflow.com/questions/3800512/calling-functions-with-settimeout。我想知道爲什麼這麼難以讓人們圍繞在頭上。文檔說你傳遞一個函數。區分函數和函數調用真的很難嗎? – 2014-10-12 16:08:47

回答

2

的問題是跟你擦肩而過的功能setInterval的方式,無關你的XHR呼叫。

傳遞函數時不要使用括號,只需傳遞名稱即可。通過使用括號,您立即執行該函數並傳遞返回值(在這種情況下未定義)。

setInterval(chatUpdate, 1000); 
//     ^no() 
+0

非常感謝!真的有幫助 – tjomamokrenko 2014-10-12 14:39:15