Problema com longa votação com jQuery no servidor Tomcat
-
25-09-2019 - |
Pergunta
Eu criei um cometServlet de acordo com este exemplo http://tomcat.apache.org/tomcat-7.0-doc/aio.html. Então eu tentei obter dados dele usando o jQuery. O código está seguindo:
$(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);
});
});
O problema é que a função de sucesso não aciona (mesmo que eu possa ver no console do Firebug que os dados vêm). Eu acho que acontece porque o servidor não fecha um escritor de resposta, mas é um objetivo da pista longa :)
Alguém tem alguma idéia de como pode ser resolvido?
Solução 2
A solução de problemas é adicionar timer para verificar o fluxo de longa policial para obter novos dados. Grande explicação está aqui: http://www.bennadel.com/blog/1976-long-polling-experiment-with-jquery-and-coldfusion.htm
Obrigado a todos.
Outras dicas
Você precisa substituir o xhr onreadystatechange
Para verificar readyState === 3
com jQuery .ajax()
. Exemplo:
var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange; // save original handler
xhr.onreadystatechange = function() {
xhr._onreadystatechange(); // execute original handler
if (xhr.readyState === 3) alert('Interactive');
};