Un problème de longue interrogation avec JQuery sur serveur Tomcat
-
25-09-2019 - |
Question
J'ai créé un CometServlet selon cet exemple http: //tomcat.apache .org / tomcat-7.0-doc / aio.html . Alors j'ai essayé d'obtenir des données de l'aide JQuery. Le code est le suivant:
$(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);
});
});
Le problème est que la fonction de succès ne déclenche pas (même si je peux voir dans la console Firebug que les données proviennent). Je pense que cela se produit parce que le serveur ne ferme pas un écrivain de réponse, mais il est un objectif de long polling:)
Est-ce que quelqu'un a des idées comment il peut être résolu?
La solution 2
La solution du problème est d'ajouter la minuterie pour vérifier le flux long sondage pour une nouvelle donnée. Grande explication est ici: http: / /www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm
Merci tout le monde.
Autres conseils
Vous devez remplacer le xhr onreadystatechange
afin de vérifier readyState === 3
avec jQuery .ajax()
. Exemple:
var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange; // save original handler
xhr.onreadystatechange = function() {
xhr._onreadystatechange(); // execute original handler
if (xhr.readyState === 3) alert('Interactive');
};