我根据这个示例中创建一个CometServlet HTTP://tomcat.apache .ORG / Tomcat的7.0-DOC / aio.html 。然后我试图让使用JQuery从它的数据。该代码是下面这样:

$(function() {

        $.longPoll = function(url, success, error) {
        $.ajax({
            url : url,
            success: function(data, status) {
                $.longPoll(url, success, error);
                if (success) {
                    success(data, status);
                }
            },
            error: function(data, status) {
                $.longPoll(url, success, error);
                if (error) {
                    error(data, status);
                }
            }
        });

    };

    $.longPoll("./comet", "", function(data, status) {
        alert("success:" + data);
    }, function(data, status) {
        alert("error:" + data);
    });
});

的问题是,成功功能不触发(即使我可以在萤火控制台看到数据来)。我想这是因为服务器不会关闭响应作家,但它是长轮询的目标:)

是否有任何人有任何想法,如何可以解决?

有帮助吗?

解决方案 2

在问题解决方案是增加计时器用于检查长轮询流为一个新的数据。伟大的解释是在这里: HTTP:/ /www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm

谢谢大家。

其他提示

您需要覆盖xhr onreadystatechange以检查与jQuery readyState === 3 .ajax()。例如:

var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange;  // save original handler

xhr.onreadystatechange = function() {
     xhr._onreadystatechange();         // execute original handler
     if (xhr.readyState === 3) alert('Interactive');
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top