الحفاظ على اتصال مسج .getJSON () مفتوحة والانتظار بينما في نص صفحة؟

StackOverflow https://stackoverflow.com/questions/809434

سؤال

وأنا أكتب نظام المراسلة دفع الأساسي. وتسببت تغيير طفيف على وقف workingly بشكل صحيح. دعني أشرح. في بلدي النسخة الأصلية، وكنت قادرا على وضع التعليمات البرمجية في وثيقة شيئا من هذا القبيل:

<head>
  ...text/javascript">
  $(document).ready(function(){
    $(document).ajaxStop(check4Updates);
    check4Updates();
  });

  function check4Updates(){
    $.getJSON('%PATH%', callback);
  };
...
</head>

وهذا عمل جيد، وسيبقي على اتصال مفتوحة حتى لو كان باطلا عودة الخادم (الذي سيكون بعد أقول 2 دقيقة مهلة). أن مجرد أن تبقي استدعاء الدالة getJSON مرارا وتكرارا إلى أجل غير مسمى. باندا سعيد.

والآن، لا بد لي من وضع مقطع التعليمات البرمجية بين العلامات. الحصول على وظيفة $ (الوثيقة) .ready () وإلى حد كبير لا تعمل.

<body>
...
check4Updates();
$("body").ajaxStop(check4Updates);
...
</body>

وهذا يعمل ... لفترة من الوقت. بعد ذلك بوقت قصير، فإنه سيتم إيقاف الدعوة check4Updates والدخول في حلقة لا نهائية واستخدام 100٪ وقت المعالج.

وأنا أحاول الحصول عليه بحيث يتم استدعاء check4Updates بشكل متكرر حتى يتم إغلاق الصفحة. إذا كان أي شخص لديه أي أفكار لماذا بلادي تغيير بسيط لم يعد يعمل كما هو متوقع، واسمحوا لي أن أعرف. شكرا لأخذ الوقت الكافي لقراءة ومساعدتي.

مع أطيب التحيات، فان نجوين

هل كانت مفيدة؟

المحلول

نعم، كنت لا تريد الذهاب الى استخدام تلك الحلقة، كنت الى حد كبير <وأ href = "http://en.wikipedia.org/wiki/Denial-of-service_attack" يختلط = "نوفولو noreferrer "> الجرعات نفسك ناهيك عن تأمين العميل.

وبسيطة بما فيه الكفاية، إنشاء المساعد الاقتراع:

المصدر: <لأ href = "http://web.archive.org/web/20081227121015/http://buntin.org:80/2008/sep/23/jquery-polling-plugin/" يختلط = " noreferrer نوفولو "> http://web.archive.org/web/20081227121015/http://buntin.org:80/2008/sep/23/jquery-polling-plugin/

والاستعمال:

$("#chat").poll({
    url: "/chat/ajax/1/messages/",
    interval: 3000,
    type: "GET",
    success: function(data){
        $("#chat").append(data);
    }
});

ورمز لتعضد هذا الامر:

(function($) {
    $.fn.poll = function(options){
        var $this = $(this);
        // extend our default options with those provided
        var opts = $.extend({}, $.fn.poll.defaults, options);
        setInterval(update, opts.interval);

        // method used to update element html
        function update(){
            $.ajax({
                type: opts.type,
                url: opts.url,
                success: opts.success
            });
        };
    };

    // default options
    $.fn.poll.defaults = {
        type: "POST",
        url: ".",
        success: '',
        interval: 2000
    };
})(jQuery);

نصائح أخرى

استخدم مهلة، هذه الأنواع من الحلقات هي فكرة سيئة حقا، لذلك إذا كان يجب أن توظف الاقتراع لأي سبب كان، تأكد من أنك لا تبقي يدق الخلفية الخاصة بك.

وتحتاج إما لتغيير طريقة الاقتراع كما وصفها altCognito، أو يمكنك استخدام المذنب، الذي يهدف إلى دفع البيانات من الخادم إلى العميل. تبعا للاحتياجات الخاصة بك، يمكنك استخدام شيء من هذا القبيل جيتي (جافا) أو ملتوية (بايثون) أو WebSync (ASP.NET/IIS)

وأعتقد أن هذا هو حول دفع الخادم؟

وماذا عن استخدام Socket.IO؟

المرجع: تقديم المقبس IO 0.9، Google مجموعة ( http://socket.io/ )

المرجع: HTTP: // techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

المرجع: المرح مع WebSockets و نود.جي إس ومسج ( http://nayna.org/blog /؟ p = 159 )

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top