2011-10-21 18 views
23

Web sitemde, kullanıcı hala yazarken arama yapmak ve sonuçları göstermek için JavaScript/AJAX kullanıyorum.AJAX: Form alanında yazarak arama için gecikme

HTML (gövde):

<form action="" method="post" accept-charset="utf-8"> 
    <p><input type="text" name="q" id="q" value="" onkeyup="doSearch(this.value)" /></p> 
</form> 

JavaScript (başlık):

function doSearch(text) { 
    // do the ajax stuff here 
    // call getResults.php?search=[text] 
} 

Ama bu sunucuya gelen istekleri bir sürü neden olabilir.

Böylece bir gecikme kurarak sunucuyu rahatlatmak istiyorum: onkeyup olay tetiklenir zaman

, işlev doSearch() Bir "ajax yükleme grafiği" göstermek ve 2 saniye beklemeniz gerekir. Sadece bu 2 saniye boyunca olay tekrar DEĞİLSE, sonuçlar PHP dosyasından alınmalıdır.

Bunu yapmanın bir yolu var mı? Bana yardım edebilir misiniz, lütfen? Şimdiden teşekkürler!

+2

Teknik olarak, soru önce talebinde bulunulmadığını, ancak üç yıl * sonra *: bu tür bir şey için 10 Remy Sharp tarafından oluşturulan bir kurnaz 'azaltma' işlevini kullanma eğilimindedir. – caw

cevap

57
var delayTimer; 
function doSearch(text) { 
    clearTimeout(delayTimer); 
    delayTimer = setTimeout(function() { 
     // Do the ajax stuff 
    }, 1000); // Will do the ajax stuff after 1000 ms, or 1 s 
} 
+0

Bu harika. Teşekkür ederim! – user3560988

+0

Teşekkürler. Sahip olduğumdan çok daha basit. –

11
setTimeout() ile gecikmeli çağırma, sonra clearTimeout()

HTML ile her olaya tekrar kaldırmak

Basitçe kurulum

<form action="" method="post" accept-charset="utf-8"> 
    <p><input type="text" name="q" id="q" value="" onkeyup="doDelayedSearch(this.value)" /></p> 
</form> 

JavaScript

var timeout = null; 

function doDelayedSearch(val) { 
    if (timeout) { 
    clearTimeout(timeout); 
    } 
    timeout = setTimeout(function() { 
    doSearch(val); //this is your existing function 
    }, 2000); 
} 
+0

Teşekkür ederiz! Bu arada, seçtiğim kodun ayrılığına ve tarzına bağlı kalmayı sevdim. Soru soranın cevabını kullanmasını çok kolaylaştırır ... – caw

İlgili konular