2013-07-09 26 views
1

我正在嘗試做一個聊天應用程序,所以我需要它始終接收服務器信息。因此,當請求完成後,在:Javascript xmlhttprequest always

http.onreadystatechange=function(){ 

我已經把另一個電話的功能,再次,所以:

request(); 

然後一切都發生在一個循環。問題是,它只能在谷歌瀏覽器中工作。在Explorer和Firefox,不要等到get.onreadystatechange=function(),然後自顧自地打電話回()像一個每秒100次,沒有理由:(

function request() 
{ 
    var get; 
    if (window.XMLHttpRequest) 
    { 
     get = new XMLHttpRequest(); 
    } 
    document.getElementById("request_status").innerHTML = "requests: "+requests; 
    get.onreadystatechange=function() 
    { 
    if (get.readyState==4 && get.status==200) 
     { 
     requests+=1; 
     request(); 
     } 
    } 
    get.open("GET","request.php",true); 
    get.send(); 
} 

谷歌瀏覽器的「請求」成長像4%第二,在IE和Firefox他們長大像每秒200次,那麼什麼是錯的!

+1

看看在開發工具Net標籤。你獲得緩存結果嗎? – Quentin

+0

用於緩存的+1。我已經創建了一個jsFiddle,http://jsfiddle.net/UkYBG/4/在IE響應302請求時,請求速度非常快 – Olegas

回答

-1

在你的函數結束時,你會想用setTimeout(functionHere(), timeInMilisHere)以毫秒爲單位指定的時間後,不斷打電話給你的功能

+0

但是如果我在結束時調用它,我不需要時間,並且函數將以最大速度調用 – user2563125

+0

你是什麼意思,你不需要時間?像時間沒有對被調用的函數有任何影響? – BrotherBallan

+0

我不需要在一段時間內使用延遲來調用函數,因爲在完成時我已經調用它。因此它儘可能快地使用 – user2563125

0

我無法檢查資源管理器,但在此小提琴中執行此操作時,Firefox適用於您的示例:http://jsfiddle.net/ZHdgb/1/

雖然它似乎適用於我,也許嘗試使這些同步請求,以便一次只有一個觸發。請看下圖:

變化

get.open("GET","request.php",true);

要:

get.open("GET","request.php",false);