1
我使用bootstrap's typeahead
從數據庫中獲取「家族姓名」。我已閱讀文檔,並且我認爲一切正常。但是,當我開始搜索時,我意識到'搜索'速度太慢,我認爲這是因爲「鍵入」每次按鍵時都會發送一個請求。Typeahead等待發出多個請求而不是最後一個
如何停止發送多個請求或嘗試在填充文本框後發送整個字符串?
也許這個信息可以幫助
這是視圖:
這是開發工具的看法:
這是JS:
我使用回調發送請求:
var familias = {};
var familiaLabels = [];
//Callback for searching the string
var buscarFamilia = _.debounce(function(query, process){
$.getJSON('{/literal}{$smarty.const.FAMILIARES_FE_ROOT}{literal}/ws/familia-ajax/', { q: query }, function (data) {
//Clean containers
familias = {};
familiaLabels = [];
//Using some underscore.js for getting data from each item
_.each(data, function(item, ix, list){
//Fill with the name of each item
familiaLabels.push(item.nombre);
//Fill data for the template
familias[ item.nombre ] = {
id:item.id,
nombre:item.nombre,
padre:item.padre,
madre:item.madre
};
});
//Return the array
process(familiaLabels);
},800);
});
這是 「預輸入」 的配置:
$('#alu_familia').typeahead({
source: function (query, process) {
buscarFamilia (query, process)
}
, updater: function (itemSelected) {
//This is for getting the id
$("#alu_fami_id").val(familias[ itemSelected].id);
return itemSelected;
}
,
minLength:2,
matcher: function() { return true; }
,highlighter: function(item){
var p = familias[ item ];
var itm = ''
+ "<div class='typeahead_wrapper'>"
+ "<div class='typeahead_labels'>"
+ "<div class='typeahead_primary'>" + p.nombre + "</div>"
+ "<div class='typeahead_secondary'><b>Padre: </b>" + p.padre +"</div>"
+ "<div class='typeahead_secondary'><b>Madre: </b>"+p.madre+ "</div>"
+ "</div>"
+ "</div>";
return itm;
}
});
在此先感謝。
感謝您的答覆,但正如你所說,這種修改只存儲值先前檢索。這很好,因爲它可以防止在重複單詞時發送任何請求。但是,我想知道的是,如何在用戶停止鍵入時向服務器發送一個請求。 – Leo
你的代碼使用'_.debounce()',因此每800ms最多調用一次該函數。因爲這裏的事件是'keryup',所以你不能告訴用戶什麼時候停止輸入,除非你願意做一些複雜的時間計算,這肯定會讓你的響應速度變慢。所以你唯一的選擇就是微調反彈時間。 – tikider
謝謝!我現在修復它的工作原理! – Leo