2012-08-08 59 views
2

如果我要實現對短輪詢是這樣的:我們是否需要setTimeout進行短輪詢?

function firstCall(){ 
    $.ajax({ 
    ... 
    success: function(response){ 
     if (response.OK == "OK"){ 
       secondCall(); 
     }else{ 
      firstCall(); 
     } 
    } 
    }); 

} 

這會不會不夠?或者我真的需要在setTimeout的else子句中圍繞firstCall()?謝謝

+6

有多難,你想打你的服務器?這可能會導致每秒超過10個請求。另外,你應該處理AJAX錯誤。 – josh3736 2012-08-08 13:54:12

+1

這種侵略有很多很好的選擇,「我們在那裏嗎?」輪詢。這真的是你唯一的選擇嗎? – 2012-08-08 13:59:55

+0

哦,geesh。感謝您指出。這很明顯。 @詹姆斯麥克勞林想分享? – user1012451 2012-08-08 14:00:18

回答

5

我建議您使用一點暫停,因爲現在您正在爲您的服務器創建大量流量。 Ajax很快,並且會經常執行success

所以我建議你使用setTimeoutsetInterval改爲!

+0

謝謝。哇。你是對的...每次遞歸調用都會......吹掉它。 – user1012451 2012-08-08 14:00:43

+0

是的,我會用setTimeout或setInterval代替這個解決方案 – tuxtimo 2012-08-08 14:03:02

1

你需要setTimeout()如果你想減少請求到服務器

+0

感謝您的幫助! – user1012451 2012-08-08 14:07:09

1

你需要setTimeout的,如果你不想等待用戶操作或Ajax響應一定時間後觸發一個事件,否則你可能會等待ajax調用成功或錯誤事件。

+0

感謝您的幫助:) – user1012451 2012-08-08 14:07:39

4

該解決方案依靠第一次調用取得成功。如果在任何時候你的代碼沒有「成功」(可能是服務器打嗝?),你的「輪詢」將停止,直到頁面刷新。

你可以使用setInterval調用該方法上定義的時間間隔,從而避免了這個問題:

setInterval(function(){ 
    $.ajax({}); // Your ajax here 
}, 1000); 

使用這兩種解決方案,您的服務器將處理大量的,可能不需要請求。您可以使用諸如PollJS(無恥的自我插頭)庫中添加增加的延遲,這將提高性能和降低帶寬:

// Start a poller 
Poll.start({ 
    name: "example_poller", 
    interval: 1000, 
    increment: 200, 
    action: function(){ 
     $.ajax({}); // Your ajax here 
    } 
}); 

// If you want to stop it, just use the name 
Poll.stop("example_poller"); 
相關問題