سؤال

لقد قمت بإنشاء 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');
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top