2010-11-12 28 views
12

Kullanıcı, giriş kutusuna giriş kodunu yazmak istediğimde $ .get kullanarak bir ajax isteği yapıyorum ve önceki ajax çağrılarını iptal etmek ve sonra yeni bir tane yapmak istiyorum, bir yolu var mı?

düzenlemek

çözüldü!

$ .get öğesinin $ .ajax için kestirme bir yol olduğunu öğrendim ve bu nedenle bir XHR döndürdüğünü ve bu değişkeni iptal edebildiğimizi öğrendim.

+0

[jquery abort() ajax isteğinin başka bir kopyasını göndermeden önce olası bir kopyası] (http://stackoverflow.com/questions/3312960/jquery-abort-ajax-request-before-sending-another) –

cevap

26

$.get'ın döndürdüğü XMLHttpRequest üzerinde .abort()'u kullanabilirsiniz.

$ .ajax() işlevi oluşturur XMLHttpRequest nesnesini döndürür: jQuery.ajax() belgelerine

var req = $.get('ajax/test.html', function(data) { 
      $('.result').html(data); 
      alert('Load was performed.'); 
      }); 

//Abort request 
req.abort() 

. Normalde jQuery, bu nesnenin oluşturulmasını dahili olarak gerçekleştirir, ancak xhr seçeneği kullanılarak bir üretim için özel bir işlev belirtilebilir. Döndürülen nesne genellikle atılabilir, ancak isteği gözlemlemek ve değiştirmek için daha düşük seviyeli bir arayüz sağlar. Özellikle, nesne üzerindeki .abort() işlevi, istek tamamlanmadan önce isteği durduracaktır. .abort() üzerinde

Daha: https://developer.mozilla.org/en/XMLHttpRequest#abort

da paralel olarak yapılan çoklu Ajax isteği işlemek için jQuery eklentisi AjaxQueue yoktur.

-2

Ajax isteğinde zaman aşımı ayarlamak ve her tuşa basmanın üzerine yazmak için daha iyi bir yol olabilir, böylece kullanıcı bir saniye yazmayı kesene kadar asıl istek tetiklenmez. Bu şekilde gereksiz isteklerde bulunmazsınız ve hem sunucuda hem de istemcide daha az yüklenme olur. biraz daha netlik için

düzenleme:

var t = false;  
function makeRequest(){ 
     t = setTimeout(function(){ 
      $.get() // make the request 
     },1000); 
    } 

Çağrı her Tuşa basıldığında işlevi. Bir kullanıcı 1 saniye içinde başka bir tuşa basarsa, zaman aşımının üzerine yazılır ve sonunda kullanıcı yalnızca 1 saniye boyunca bir tuşa basmazsa tetiklenir.

+0

nasıl ayarlayabilirim ajax isteğinde zaman aşımı var mı? – Shaheer

+0

benim düzenleme bakın, umarım bu kadar temizler –

+8

-1 çünkü yanlış. Zamanlayıcının kimliğinin saklandığı değişkenin üzerine yazmak eski zamanlayıcıyı iptal etmez. İlk önce clearTimeout (t) 'yi yapmalısınız. –

İlgili konular