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?

Foi útil?

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');
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top