Problema con lunghi polling con JQuery su Tomcat Server
-
25-09-2019 - |
Domanda
ho creato un CometServlet secondo questo esempio http: //tomcat.apache .org / tomcat-7.0-doc / aio.html . Poi ho cercato di ottenere i dati da esso utilizzando jQuery. Il codice è il seguente:
$(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);
});
});
Il problema è che la funzione di successo non lo fa grilletto (anche se posso vedere nella console Firebug che i dati provengono). Penso che accade perché il server non si chiude uno scrittore di risposta, ma è un obiettivo di lungo polling:)
Se uno ha qualche idea come può essere risolto?
Soluzione 2
La soluzione del problema è quella di aggiungere timer per il controllo del flusso di lungo sondaggio per un nuovo data. Grande spiegazione è qui: http: / /www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm
Grazie a tutti.
Altri suggerimenti
È necessario sovrascrivere il xhr onreadystatechange
al fine di verificare la presenza di readyState === 3
con jQuery .ajax()
. Esempio:
var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange; // save original handler
xhr.onreadystatechange = function() {
xhr._onreadystatechange(); // execute original handler
if (xhr.readyState === 3) alert('Interactive');
};