$(document).ready(function() {
$('#domain').change(function() {
//
});
});
更改函数内的代码基本上会发送ajax请求来运行PHP脚本。 #domain是文本输入字段。基本上我想做的是在文本字段中的某些文本中将ajax请求作为用户类型发送(例如搜索建议)。
但是,我想设置一个时间间隔以减轻PHP服务器的负载。因为如果jQuery在每次用户向文本字段添加另一个字母时发送AJAX请求,它将消耗大量带宽。
所以我想设2秒作为间隔。每次用户键入一个字母时都会触发AJAX请求,但最大频率为2秒。
我该怎么做?
答案 0 :(得分:9)
$(function() {
var timer = 0;
$("#domain").change(function() {
clearTimeout(timer);
timer = setTimeout(function(){
// Do stuff here
}, 2000);
});
});
答案 1 :(得分:6)
$(document).ready(function() {
var ajaxQueue;
$('#domain').change(function() {
if(!ajaxQueue) {
ajaxQueue = setTimeout(function() {
/* your stuff */
ajaxQueue = null;
}, 2000);
}
});
});
答案 2 :(得分:4)
您真正想要做的是检查自上次更改事件以来的时间,以便跟踪事件之间的毫秒数,而不是每2秒拨打一次电话。
$(document).ready(function() {
var lastreq = 0; //0 means there were never any requests sent
$('#domain').change(function() {
var d = new Date();
var currenttime = d.getTime(); //get the time of this change event
var interval = currenttime - lastreq; //how many milliseconds since the last request
if(interval >= 2000){ //more than 2 seconds
lastreq = currenttime; //set lastreq for next change event
//perform AJAX call
}
});
});
答案 3 :(得分:1)
离开我的头顶而不在浏览器中尝试这个。像这样:
$('#domain').change(function() {
if (!this.sendToServer) { // some expando property I made up
var that = this;
this.sendToServer = setTimeout(function(that) {
// use "that" as a reference to your element that fired the onchange.
// Do your AJAX call here
that.sendToServer = undefined;
}, yourTimeoutTimeInMillis)
}
else {
clearTimeout(this.sendToServer);
}
});
答案 4 :(得分:1)
两个变量,charBuffer,sendFlag
这样可以让你第一次按下一个键,然后发送它,并且必须经过至少2秒才能再次发送。
可以使用一些调整,但我使用此设置做类似的事情。
答案 5 :(得分:0)
我越来越多地遇到这个问题(我越是做UI ajax的东西)所以我把它打包成一个可用的插件here