如何在jQuery中连接到服务器更新(comet ajax)?

如何在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); } 还可以想象,在页面加载到浏览器中之后

几乎所有web开发人员都知道jQuery,jQuery是目前市场上最流行的JavaScript库。对吧?

现在,假设服务器上有一个每秒向客户机推送数据的服务。基于C语言的服务器代码的ASP.NET实现可能是这样的:

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套接字或服务器发送的事件可能是不错的选择。但是我没有足够的时间来学习它们并解决它们未知的问题和挑战