Problema con el sondeo largo con jQuery en Tomcat Servidor
-
25-09-2019 - |
Pregunta
I creó una CometServlet según este ejemplo http: //tomcat.apache .org / tomcat-7,0-doc / aio.html . Luego trató de obtener datos de él usando jQuery. El código es el siguiente:
$(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);
});
});
El problema es que la función de disparo éxito no lo hace (aunque puedo ver en la consola de Firebug que los datos proceden). Creo que se debe a que el servidor no se cierra un escritor respuesta, pero es un objetivo de largo de votación:)
¿Alguien tiene alguna idea de cómo se puede solucionar?
Solución 2
La solución del problema es añadir temporizador para el control de la corriente de largo para un nuevo sondeo de datos. Gran explicación está aquí: http: / /www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm
Gracias a todos.
Otros consejos
Se necesita sobrescribir el xhr onreadystatechange
con el fin de comprobar si hay readyState === 3
con jQuery .ajax()
. Ejemplo:
var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange; // save original handler
xhr.onreadystatechange = function() {
xhr._onreadystatechange(); // execute original handler
if (xhr.readyState === 3) alert('Interactive');
};