Проблема с длительным опросом с помощью JQuery на сервере Tomcat - PullRequest
0 голосов
/ 31 августа 2010

Я создал 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);
    });
});

Проблема в том, что функция успеха не срабатывает (хотя я вижу в консоли FireBug, что данные поступают). Я думаю, что это происходит потому, что сервер не закрывает средство записи ответов, но это цель длительного опроса :))

Есть ли у кого-нибудь идеи, как это можно решить?

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Вам нужно перезаписать xhr onreadystatechange, чтобы проверить readyState === 3 с помощью jQuery .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');
};
0 голосов
/ 01 сентября 2010

Решение проблемы - добавить таймер для проверки потока длинных опросов на наличие новых данных. Отличное объяснение здесь: http://www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm

Спасибо всем.

...