Проблема с длинным опросом с jQuery на Tomcat Server
-
25-09-2019 - |
Вопрос
Я создал 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
Решение проблемы состоит в том, чтобы добавить таймер для проверки потока длительного опроса для новых данных. Отличное объяснение здесь: http://www.bennadel.com/blog/1976-long-polling-experiment-with-jquery-and-coldfusion.htm.
Всем спасибо.
Другие советы
Вам нужно перезаписать 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');
};