如果输入字段的长度为空,我试图取消所有剩余的AJAX请求。但是,我看到了这个错误:
未捕获的TypeError:无法读取属性' abort'未定义的
$("input#enter").keyup(function() {
if(this.value.length < 1) {
$("#display").empty();
request.abort(); // <--- this line
}else{
var request = $.ajax({
type: "POST",
url: "getdata.php",
data: "title=" + this.value,
success: function(data) {
$("#display").empty();
$("#display").html(data);
}
});
}
});
这是我看到类似示例的地方,他们使用了request.abort()
:Stop all active ajax requests in jQuery
答案 0 :(得分:0)
您的问题归因于request
变量的范围。您需要在处理程序之外声明它:
var request;
$("input#enter").keyup(function() {
var $display = $('#display');
if (this.value.trim().length < 1) {
$display.empty();
request && request.abort();
} else {
request = $.ajax({
type: "POST",
url: "getdata.php",
data: { title: this.value.trim() },
success: function(data) {
$display.html(data);
}
});
}
});
请注意,我稍微修改了JS代码,因为如果您覆盖empty()
,则无需调用html()
。
另外,假设这是一种过滤系统,您可能需要考虑在所有情况下在abort()
上使用request
,就像按下了新密钥一样,之前的请求不再是与结果相关并且可以结束 - 像这样:
var request;
$("input#enter").keyup(function() {
var $display = $('#display');
request && request.abort(); // always abort the previous request, if there was one
if (this.value.trim().length > 0) {
request = $.ajax({
type: "POST",
url: "getdata.php",
data: { title: this.value.trim() },
success: function(data) {
$display.html(data);
}
});
}
});