【问题标题】:Ajax delay is not workingAjax 延迟不起作用
【发布时间】:2014-03-17 08:18:48
【问题描述】:
$(document).ready(function() {
setInterval($("#to").on("change keyup paste click mouseout", function() {
$.get('ajaxSearch.php', $("#form").serialize(), function(data) {
$('#result').html(data);
});
}, 3000);
});
ajax 延迟或 setTimeout 不起作用。我想延迟输入字段并在 3 秒后运行 ajax,但它不起作用。
【问题讨论】:
标签:
javascript
jquery
ajax
forms
get
【解决方案1】:
您应该使用setTimeout 来延迟ajax 请求。
如果change keyup paste click mouseout 事件之一被触发,您只需取消之前的延迟并创建一个新延迟。
$(document).ready(function() {
var timer_id;
$("#to").on("change keyup paste click mouseout", function() {
if (timer_id) {
clearTimeout(timer_id);
}
timer_id = setTimeout(function() {
$.get('ajaxSearch.php', $("#form").serialize(), function(data) {
$('#result').html(data);
});
}, 3000);
});
});
【解决方案2】:
您的语法错误,setInterval() 也应该在处理程序中
$(document).ready(function () {
var interval;
$("#to").on("change keyup paste click mouseout", function () {
if (interval) {
return
};
setInterval(function () {
$.get('ajaxSearch.php', $("#form").serialize(), function (data) {
$('#result').html(data);
});
interval = undefined;
}, 3000);
});
});
另外,如果已经有一个时间间隔在进行中,我们不需要添加另一个调用。
【解决方案3】:
在您的情况下,您将 deley 设置为事件处理(为什么您使用 setInterval 而不是 setTimeout ?)
试试
$(document).ready(function() {
$("#to").on("change keyup paste click mouseout", function() {
setTimeout(function(){
$.get('ajaxSearch.php', $("#form").serialize(), function(data) {
$('#result').html(data);
});
}, 3000);
});
});