Comet 编程几乎为任何 Web 开发人员所熟知,而 jQuery 是目前市场上最流行的 JavaScript 库。正确的?
现在,假设服务器上有一个服务每秒向客户端推送数据。基于 C# 语言的服务器代码的 ASP.NET 实现可能是这样的:
while (true)
{
Response.Write("{data: 'data from server'}");
Response.Flush();
Thread.Sleep(1000);
}
还想象一下,在页面加载到浏览器后,一个 jQuery 片段触发与服务器的保持活动 HTTP ajax 连接,服务器在服务器上将这些数据片段发送回客户端。
到这里为止根本不是问题,因为儿童开发人员也可以做到。然而,jQuery AJAX 有许多在不同场合触发的回调函数。success
, error
, complete
, 等等。但是这些方法都不会在从服务器发送的每个 JSON 上被触发。我的意思是,这段代码不起作用:
$(function () {
$.ajax({
type: 'GET',
url: 'url-of-that-service',
dataType: 'json',
success: function (result) {
/*
Here, I need to get the result sent by
the Server, and based on its data,
manipulate DOM. For example, imagine
that server sends its current time
in JSON format each second. I need
to parse the sent JSON string, and
append the server time somewhere in
the web page.
Success function never gets fired for
these server-pushed data.
What should I do?
*/
},
error: function (error) { }
});
});
在 jQuery 中获得最新更新通知的一种方法是轮询responseText
底层xhr
对象,并定期检查服务器发送的最新数据。但是,我正在寻找一种基于事件的方法来挂钩活动的 ajax 连接,并在服务器发送某些内容时得到通知。
我的问题是,我应该如何检测到某些东西已经从服务器到达?有没有不包括setTimeout
or的简洁方法setInterval
?jQuery 在这里有什么可以帮助我们的吗?