Ardışık Ajax isteklerini işleme - JQUERY

4 Cevap php

Bir tuşa basıldıktan sonra bir AJAX çağrısı girilen metin için arama sonuçlarını döndürmek için yapılan bir arama metin kutusu var. Bu her basışı için yapılan bir AJAX çağrısı sonuçlanır.

Örneğin ben yazarsanız airport:

Sorun, hepsinin birbiri ardına başlayabilir ama mutlaka çok daha sık aynı sırayla bitmiyor olduğunu - ancak ben 7 ajax istekleri her sırasıyla, ai, hava, airp, airpo, airpor, havaalanı için arıyor olsun Ben sadece daha sonra airpo için sonuç almak için ben airport yazılı ve airport için sonuç almış olabilir yani yanlış sırayla sonuç alamazsınız.

Bunu nasıl burada jQuery ele?

Update:

Orada 3 saniyelik bir zamanlayıcı gecikme - ama sorunu bir AJAX isteği yapıldığında, yapılan başka Talebi benzeri önceki istek ve dışarı iptal sağlamada olduğunu.

Ben bu kodu nasıl yapabilir?

4 Cevap

Bir gecikme ajax arama Ateş - Yukarıda abort() kodu ile birlikte bu kullanın:

var typeDelay = function(){
    var timer = 0;
    return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    }  
}();

$("#searchField").keypress(function(){
    typeDelay(function(){
        // your ajax search here, with a 300 ms delay...
    }, 300);
});

Her tuş bir arama isteği gönderme genellikle kötü bir fikirdir - Ben (yani metin kutusu değeri, her 3 saniyede bir gönderme) kısa aralıklarla göndermek yerine öneririm.

Sadece 1 (örn. dönüşünde temizlenir, Gönderirken set) herhangi bir zamanda aktif olabilir, böylece daha fazla, asenkron döner önlemek için, sen, bir isteğin durumu izlemek için bir bayrak olabilir. Bu etkili bir aramalarını nasıl senkron hale getirecektir.


EDIT: Eklendi örnek kod

var req = null;

function sendRequest (text)
{
	// Check for pending request & cancel it
	if (req) req.abort ();

	req = $.ajax ({
		// various options..
		success: function (data)
		{
			// Process data
			...
			// reset request
			req = null;
		}
	});
}

Sen AJAX istekleri iptal edebilirsiniz:

var x = $.ajax({
    ...
});

x.abort()

Eğer bir önceki önce yeni bir isteği göndermek istiyorsanız eğer öyleyse) ilki (iptal, geri döndü.

  1. Jquery bir "ajax kuyruğu" kurmak ... Talepleriniz sipariş gitmek sağlamak için kullanabilirsiniz. Aşağıdaki adresi altındaki büyük bir örnek vardır:

    AJAX Streamlining techniques?

  2. Yukarıdaki cevaplar gibi Gecikme ve İptal mekaniği işlemek için, bu sıranın işlevselliğini genişletmek.

    Gecikme bitmeden başka bir isteği sıraya teslim edilmesi halinde, isteği sıraya iptal.

Öneri: gecikme işlevsellik eklemek ve kuyrukta için bir istek göndermek zaman değerler params gibi, talep böylece kuyruğuna doğru mekaniği iptal, bu şekilde, sıra eklenti bu ihtiyacı dışında yeniden kalır.