2013-09-24 55 views
1

我正在構建一個網站的實時搜索,該網站將根據用戶輸入的內容返回結果。我只希望在用戶輸入完畢後發送請求。Jquery ajax搜索反彈

我已經嘗試了一些使用計時器的實現,甚至是來自underscore.js的去抖動方法,但我似乎總是得到類似的結果。

在我輸入時,請求會被延遲,直到我輸入完畢。但是,它似乎將所有的輸入視爲排隊。例如,如果我輸入「自行車」,結果會返回如下結果:

b 

bi 

bik 

bikes 

因此,您會得到一個搜索結果流。

這是我目前的實現使用下劃線JS

$('#search_term').on('keyup', _.debounce(function (e) { 

     $.ajax({ 
      type: "GET", 
      url: "quicksearch.php", 
      data: { search_term:$('#search_term').val()}, 
      success: function(msg){ 
       $('#quick_search_results').html(msg).slideDown(); 
      } 
    }); 

}, 100)); 

人有什麼想法?

+0

你的實現是正確的,你可以確認它的發射多個請求的控制檯網絡選項卡上檢查 ? 100ms可能只是太低而不是價值 –

回答

4

也許你的用戶打字速度不夠快。設置_.debounce功能的wait參數長於在你的榜樣的100毫秒(見規格:_.debounce(function, wait, [immediate])

$('#search_term').on('keyup', _.debounce(function (e) { 
    $.ajax({ 
     type: "GET", 
     url: "quicksearch.php", 
     data: { search_term:$('#search_term').val()}, 
     success: function(msg){$('#quick_search_results').html(msg).slideDown();} 
    }); 
}, 300)); // < try 300 rather than 100 
+0

增加超時似乎有幫助。在發佈之前我沒有檢查控制檯,這次請求只發送一次,與我嘗試過的其他示例一樣有多個請求,謝謝。 – gvperkins