如果不从您的页面向您的服务器发出某种请求,就无法每 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(带有不可靠的浏览器支持)的好处可以忽略不计,不值得编程开销。
谢谢,亨利