2011-02-04 57 views
1

希望以下是接近,但我覺得我做錯了第一部分。
需要一個簡單的方法來反覆輪詢使用javascript的文件


理想的結果是狀態-remote.php每2秒被輪詢,而沒有被緩存(因此非緩存隨機變量)。

如果相關,php文件有兩個變量,其狀態決定了該頁面的可見性。

<script id="status" type="text/javascript"></script> 

<script type="text/javascript"> 
    var nocache = Math.random(); 
    setInterval(
    document.getElementById('status').src = '/status-remote.php?sid=2&random='+nocache; 
    }, 2000); 
</script> 

非常感謝您的關注!

回答

0

我建議使用http://socket.io/,它會降級到所有瀏覽器,並使用使用功能檢測的最佳可用選項。

+0

看起來像是矯枉過正。 – jAndy 2011-02-04 09:27:55

+0

感謝您的建議@macarthy - 看了一下socket.io文檔,看起來可能有點矯枉過正(我在這裏有一個新手:S)我對我的方式有很大的影響嘗試? – Jamie 2011-02-04 09:28:30

1

我想你應該在setInterval方法裏面調用Math.random()
事情是這樣的:

<script type="text/javascript"> 
    setInterval("var nocache = Math.random(); 
    document.getElementById('status').src = 
    '/status-remote.php?sid=2&random='+nocache;", 2000); 
1

你可以使用一個(隱藏)iframe和都有狀態remote.php與元頭返回一個HTML文檔:

<meta http-equiv="refresh" content="2" /> 

然後解析通過JavaScript響應在主文檔中。

編輯:爲了防止緩存,我建議發送適當的HTTP標頭。

edit2:我不知何故錯過了它是一個http-equiv元頭,所以你可以發送一個HTTP刷新頭。

Refresh: 2; url=http://www.example.com/ 

這也意味着你不一定會發送HTML內容。此外,在HTTP你可以指定一個延遲和URL去(如果你真的想與status-remote?random=random_number緩存防止啄去)

0

緩存:

(因此隨機非緩存變量)

我認爲你用這種方式填滿了用戶瀏覽器緩存中的大量垃圾。您應該發送正確的標頭來繞過緩存(代理也更好)。

//Set no caching 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

選擇一個:

旁註:

性能/可擴展性是(可能)會吸(尤其是如果負載不在內存中)。我想如果你能真的應該避免投票。一些解決方案,以防止這種情況:

相關問題