2016-03-22 26 views
3

Uygulamamda arama kutunun var. Kullanıcı arama kutusuna kelime yazarken sonuçları göstermek zorunda. Bunun için önceki tüm istekleri iptal etmeli ve son isteğin sonucunu ızgarada göstermeliyim.Önceki tüm istekleri iptal et jquery

Kılavuz kullanıyorum çünkü "beforeSend" tablosu, jquery beforeSend olayını geçersiz kılacak. Bu yüzden

<script type="text/javascript"> 
$(function() { 
    $.xhrPool = []; 
    grid.Adaptor.prototype.beforeSend = function (jqXHR) { 
     $.xhrPool.push(jqXHR); 
    } 
    $.xhrPool.abortAll = function() { 
     $(this).each(function (i, jqXHR) { 
      jqXHR.abort(); 
      $.xhrPool.splice(i, 1); 
     }); 
    } 
    $.ajaxSetup({ 
     complete: function (jqXHR) { 
      var i = $.xhrPool.indexOf(jqXHR); 
      if (i > -1) $.xhrPool.splice(i, 1); 
     } 
    }); 
}) 

Ancak, ben xhrPool isteği itebilir ama önceki istekleri iptal edemez, kod aşağıda kullandı.

Not $.xhrPool.abortAll = function() { Bu, bir kesme noktası yerleştirdiğimde vurmuyor.

Burada neyim var?

+1

. JavaScript yorumcusu bu yöntemi kendisi arayacak? – undefined

+0

http://stackoverflow.com/a/8841412/1982680 bunu deneyin ve http://jsfiddle.net/s4pbn/148/ –

+0

"$ .xhrPool.abortAll" kodunu çağırmak için kod nerede? –

cevap

1

Kullanıcı arama kutusuna kelimeyi yazarken sonuçları göstermem gerekiyor. Bu için ve önceki tüm isteklerini iptal etmem gerekiyor. kılavuzundaki son isteğin sonucunu.

Kodunuz:

$.ajaxSetup({ 
    complete: function (jqXHR) { 
     var i = $.xhrPool.indexOf(jqXHR); 
     if (i > -1) $.xhrPool.splice(i, 1); 
    } 
}); 

isteği success veya error olarak tepkisini var sadece bu complete geri arama yangınları olarak bir şey yapmak olmaz. Yani, burada iptal etmek mantıklı değil.

Sana clearTimeout() birlikte zamanlanmış setTimeout() kullanmayı öneririm: Bir dizi nesneye bir yöntem ekliyoruz

$(function() { 
    var time; 

    $('input').keydown(function(e){ 

    if(time){ 
     // before hitting the ajax 
     // clear the timeout if there is/are 
     clearTimeout(time); 
    } 

    time = setTimeout(function(){ 
     // here put the ajax code. 
    },600); 

    }); 

}) 
+0

SetTimeOut işlevini eklediğimde bu çalışıyor. AjaxSetup'da önceki ajax isteklerini iptal edemediğimi onaylamam gerekiyor mu? – Shesha

+0

Bunu 'beforeSend: callback' ile yapabilirsiniz. – Jai

+0

tamam güzel jai. Ben grid kullanıyorum, ajaxsetup beforeSend benim için çalışmayacak. Çözüm için teşekkürler. :) :) – Shesha

İlgili konular