如何在jQuery中连接到服务器更新(comet ajax)?
几乎所有web开发人员都知道jQuery,jQuery是目前市场上最流行的JavaScript库。对吧? 现在,假设服务器上有一个每秒向客户机推送数据的服务。基于C语言的服务器代码的ASP.NET实现可能是这样的:如何在jQuery中连接到服务器更新(comet ajax)?,jquery,ajax,comet,Jquery,Ajax,Comet,几乎所有web开发人员都知道jQuery,jQuery是目前市场上最流行的JavaScript库。对吧? 现在,假设服务器上有一个每秒向客户机推送数据的服务。基于C语言的服务器代码的ASP.NET实现可能是这样的: while (true) { Response.Write("{data: 'data from server'}"); Response.Flush(); Thread.Sleep(1000); } 还可以想象,在页面加载到浏览器中之后
while (true)
{
Response.Write("{data: 'data from server'}");
Response.Flush();
Thread.Sleep(1000);
}
还可以想象,在页面加载到浏览器中之后,jQuery片段触发与服务器的保持活动的httpajax连接,服务器在该连接上将这些数据片段发送回客户端
到目前为止,这一点都不成问题,因为一个儿童开发人员也可以这样做。然而,jQueryAjax有许多回调函数,它们在不同的场合被触发<代码>成功,错误
,完成
,等等。但是这些方法都不会在服务器发送的每个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中最新更新通知的一种方法是轮询底层xhr
对象的responseText
,并定期检查它是否有服务器发送的最新数据。然而,我正在寻找一种基于事件的方法来连接到活动的ajax连接,并在服务器发送内容时得到通知
我的问题是,我应该如何检测来自服务器的东西?有没有什么好办法不包括
setTimeout
或setInterval
?jQuery在这方面有什么帮助吗?您有函数,比如说,sendcomerequest
在这里发送ajax请求。在继续从服务器响应后再次调用sendcomerequest
的成功回调时,可以使用递归代替setInterval
。它调用长轮询方法。对于C,你可以阅读。它解释了异步comet服务器的一个好方法。在您的问题中,很多事情还不清楚
但如果你在寻找彗星。。。我认为您应该寻找comet的一个可靠而实用的实现,并避免使用[thread.sleep()+continuous polling]之类的黑客,因为它不适合许多同时使用的用户
对于.net,您有-lightstreamer-
另外,请确保您确实需要comet,否则请尝试使用web套接字。我需要将其实现为一系列请求,而不是长时间的轮询。谢谢您的回答。我已经熟悉comet编程的现成解决方案。然而,这次我需要从头开始实现它。Web套接字或服务器发送的事件可能是不错的选择。但是我没有足够的时间来学习它们并解决它们未知的问题和挑战