沒有一種方式來獲得每2秒實時更新一次,而無需向您的服務器發送某種請求,否則如何知道是否有任何更改?
就我個人而言,我會寫一個CFC方法來讀取您的文本文件,並查看它是否已更改,然後每隔幾秒使用jQuery輪詢該方法以返回它是否已更改,並返回任何更新的內容。
不知道你的文本文件的細節等,很難寫出任何準確的。從根本上講,你的CFC方法必須存儲(可能在SESSION var)一個文本文件數據的副本,所以它可以將它與最新的讀入數據進行比較,並判斷是否有任何改變。如果它已經改變,那麼發送一個結構返回更新,或者返回一個說明它沒有改變的響應。
你CFC代碼會是這個樣子:
<cffunction name="check_update" access="remote" output="false">
<cfset response = structNew()>
<cffile action="read"
file="path\to\your\textfile.txt"
variable="file_content"
>
<cfif file_content NEQ SESSION.file_content>
<cfset response.updated = true>
<cfset SESSION.file_content = file_content>
<cfset response.content = structNew()>
<!--- code here to populate 'content' variable with updated info --->
<cfelse>
<cfset response.updated = false>
</cfif>
<cfreturn response>
</cffunction>
然後jQuery代碼來查詢該數據是這樣的:
var update_interval;
var update_pause = 3000;
function check_update() {
var request = {
returnformat : 'json',
queryformat : 'column',
method: 'check_update'
}
$.getJSON("path/to/your/service.cfc", request, function(data) {
if(data.UPDATED == true) {
/* code here to iterate through data.CONTENT */
/* and render out your updated info to your table */
}
});
}
$(document).ready(function() {
update_interval = setInterval(check_update(), update_pause);
});
所以一旦DOM準備就緒,我們創造的間隔在這種情況下每3秒(3000毫秒)觸發並調用check_update()函數。該功能會打電話給您的CFC,並檢查響應。如果響應UPDATED值爲true,那麼它會運行任何代碼來呈現您的更新。
這是實現你所需要的最直接的方法,應該工作而不管瀏覽器。根據我的經驗,輪詢一個CFC的開銷確實非常小,所傳輸的數據量很小,因此處理應該沒有問題。
我不認爲有任何其他方法可以更輕量級/易於放在一起。長輪詢或SSE(具有惡意瀏覽器支持)的好處是微不足道的,不值得編程開銷。
謝謝亨利
非常感謝您花時間回答Zarko。你的回答非常豐富。在試圖找到方向時,我也遇到了HTML5服務器發送事件,它看起來很適合這種情況,因爲我只需要從服務器到客戶端的信息流向一個方向。問題再次出現,就像websocket一樣(正如您在上面指出的那樣),除非您的訪問者擁有最新的瀏覽器,否則將無法工作! – AlanJames
我想我可能會繼續嘗試使用服務器發送的事件,並將回退長輪詢是用戶瀏覽器不支持它。以下是有關Server Sent Events的一些信息,如果有人感興趣 - http://www.html5rocks.com/en/tutorials/eventsource/basics/#toc-introduction,http://html5doctor.com/server-sent-events/ ,http://www.sagarganatra.com/2011/01/server-sent-events-with-html5-and.html – AlanJames