我想确保一次只有一个AJAX请求(针对用户)。这就是我试过的:
var ajaxFinished = 1;
$('#selector').keyup(function() {
if (ajaxFinished == 1) {
ajaxFinished = 0;
$.get('test.php', { par : "par" }, function(data) {
// do stuff with data
ajaxFinished = 1;
});
}
});
但问题是AJAX请求现在只执行一次,即使我多次激活该事件。
答案 0 :(得分:3)
当你$ .get发生错误并且ajaxFinished永远不会被重置为1时可能是吗?
您可能希望使用$ .ajax而不是$ .get。 $ .ajax将让您捕获成功和错误事件。
答案 1 :(得分:3)
我认为科里已经钉牢了。另一种可能性:你引用的代码块是否在我们看不到的另一个函数内?然后它可能是ajaxFinished超出范围 - 纠正我如果我错了,我对JS范围和匿名函数的了解并不完美。在这种情况下,您必须删除“var”或在正文中声明它。
答案 2 :(得分:2)
我猜ajaxFinished应该是一个全局变量。删除var关键字。尝试:
ajaxFinished = 1;
答案 3 :(得分:1)
如果我正在编写该功能,我会将其拆分并调用超时
var autocomplete_timeout;
$('#selector').keyup(function() {
if(autocomplete)
clearTimeout(autocomplete_timeout);
autocomplete_timeout = setTimeout(300, "autocomplete('"+ this.val() +"');");
});
function autocomplete(param1, param2){
$.get('test.php', { par : "par" }, function(data) {
// do stuff with data
ajaxFinished = 1;
});
}
在用户停止输入
之后300毫秒缓冲ajax调用的行