مشكلة في الاقتراع الطويل مع jQuery على خادم Tomcat
-
25-09-2019 - |
سؤال
لقد قمت بإنشاء cometservlet وفقًا لهذا المثال http://tomcat.apache.org/tomcat-7.0-doc/aio.html. ثم حاولت الحصول على بيانات منه باستخدام jQuery. الكود يتبع:
$(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);
});
});
المشكلة هي أن وظيفة النجاح لا تؤدي إلى تشغيل (على الرغم من أنني أستطيع أن أرى في وحدة تحكم Firebug أن البيانات تأتي). أعتقد أن ذلك يحدث لأن الخادم لا يغلق كاتب استجابة ، لكنه هدف للتجول منذ فترة طويلة :)
هل لدى أي شخص أي أفكار كيف يمكن حلها؟
المحلول 2
يتمثل حل المشكلة في إضافة مؤقت للتحقق من دفق السلطة الطويلة لبيانات جديدة. شرح رائع هنا: http://www.bennadel.com/blog/1976-long-polling-experiment-with-jquery-and-coldfusion.htm
شكرا لكم جميعا.
نصائح أخرى
تحتاج إلى الكتابة فوق xhr onreadystatechange
من أجل التحقق من readyState === 3
مع jQuery .ajax()
. مثال:
var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange; // save original handler
xhr.onreadystatechange = function() {
xhr._onreadystatechange(); // execute original handler
if (xhr.readyState === 3) alert('Interactive');
};
لا تنتمي إلى StackOverflow