Javascript jQuery自动完成太多数据库请求
在jQueryAjax自动完成小部件中使用db数据时,如何解决对数据库的请求过多的问题?基本上,每次用户插入一封信时,脚本都会向数据库发出ajax请求,将db请求降至最低的最佳做法是什么Javascript jQuery自动完成太多数据库请求,javascript,jquery,ajax,database,autocomplete,Javascript,Jquery,Ajax,Database,Autocomplete,在jQueryAjax自动完成小部件中使用db数据时,如何解决对数据库的请求过多的问题?基本上,每次用户插入一封信时,脚本都会向数据库发出ajax请求,将db请求降至最低的最佳做法是什么 我从第三方应用程序获得数据,所以我必须考虑它可以在我的应用程序中改变。< /强> < p>你可以节制或去抖动请求。这些函数通常包含在像Lodash()这样的库中 去抖动:当按下一个键时,计时器启动。当计时器结束时,进行Ajax调用。在定时器期间按下另一个键时,定时器复位 油门:当按下一个键时,会发出一个Aj
<强>我从第三方应用程序获得数据,所以我必须考虑它可以在我的应用程序中改变。< /强>
< p>你可以节制或去抖动请求。这些函数通常包含在像Lodash()这样的库中 去抖动:当按下一个键时,计时器启动。当计时器结束时,进行Ajax调用。在定时器期间按下另一个键时,定时器复位油门:当按下一个键时,会发出一个Ajax调用并启动一个计时器。当定时器运行时按下另一个键时,该键将被忽略 几个月前我也有同样的问题。
我找到了两种解决方案: 解决方案1:
不要从键入的第一个字母开始查询。使用“minLength”自动完成属性。添加该属性后,第一个查询将从n开始,其中n是以前键入的字母数(整数)。
例如:
$( ".selector" ).autocomplete({
minLength: 3
});
$( ".selector" ).autocomplete({
delay: 500
});
解决方案2:在多次发送之间添加延迟(非常短,但对数据库来说很好)。像250/300/500毫秒这样的短时间(取决于你和数据库之间的ping,或者用户带宽)是非常可观的。值的单位为毫秒(整数)。
例如:
$( ".selector" ).autocomplete({
minLength: 3
});
$( ".selector" ).autocomplete({
delay: 500
});
我希望它能满足您的需要。不要犹豫同时使用这两种方法。正如@Remq所说,您可以试试这个
$("your_selector").autocomplete({
source: debounce(querySourceData, 1000),
});
function debounce(fn, delay) {
var timer;
return function() {
var args = [].slice.call(arguments);
var context = this;
if (timer) {
window.clearTimeout(timer);
}
timer = window.setTimeout(function() {
fn.apply(context, args);
}, delay);
};
};
function querySourceData(request, response) {
$.ajax({
url: '/your_api',
success: function(data = []) {
response(data);
},
error: function() {
response([]);
}
});
}
您可以使用jquery autocomplate的minLength属性。为什么不试试Scrollable呢?例如:+1,用于教授与问题相关的新概念。很抱歉没有接受你的回答。你和@Aethyn的回答对我都很有用。