jquery explete ، هل يمكنني توقف الاتصال Ajax السابق عندما أرفع واحدة جديدة؟

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

سؤال

أنا أستخدم jQuery autocomplete, ولكن وجدت مشكلة متعلقة بالأداء - إذا قمت بإدخال "ABC" ، فسيتم مسحها بواسطة "A" و "AB" و "ABC" ، في مرة واحدة ، كيف يمكنني إيقاف "A" السابق "A" ، "AB" عندما يقوم Ajax Calling بالبحث عن طريق "ABC"؟

الحالة المماثلة هي: أستخدم مواد DataTables jQuery ، وأريد القيام ببعض البحث مثل ، لقد كتبت شيئًا للبحث (طريقة البحث عن ويب الاتصال) ، والنقر فوق الزر - "البحث" 3 مرات في مرة واحدة ، أو تم تغيير نص البحث فقط عندما أكون فقط عندما أقوم النقر فوق "البحث" ، ورفع بحثًا جديدًا ، كيف يمكنني إيقاف مكالمة AJAX السابقة غير المجدية؟

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

المحلول

على افتراض أنك تستخدم jQuery UI الإكمال التلقائي:

  1. يمكنك تحديد الحد الأدنى لطول السلسلة قبل البدء في البحث. (الافتراضي هو 3 أعتقد)
  2. يمكنك أيضًا تحديد التأخير بين ضغط المفاتيح الأخير ومكالمة AJAX. عادة ما يكون 2-300 مللي ثانية.
  3. Ajaxqueue قد يساعدك على تنظيف بعض الأشياء. Dunno كيف (لا أحتاجه أبدًا) ، لكن يستحق لقطة :)

نصائح أخرى

jquery $.ajax إرجاع كائن xmlhttprequest يمكن إلغاؤه عبر طريقته الأصلية .abort()

$("#search").autocomplete({
    minLength: 3,
    delay: 300, // this is in milliseconds
    json: true,
    source: function(request, response){
        // New request 300ms after key stroke
        var $this = $(this);
        var $element = $(this.element);
        var previous_request = $element.data( "jqXHR" );
        if( previous_request ) {
            // a previous request has been made.
            // though we don't know if it's concluded
            // we can try and kill it in case it hasn't
            previous_request.abort();
        }
        // Store new AJAX request
        $element.data( "jqXHR", $.ajax( {
            type: "POST",
            url: "foo.php",
            dataType: "json",
            success: function( data ){
                response( data );
            }
        }));
    }
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top