javascript - 无法读取未定义的属性 'abort'

标签 javascript jquery ajax

如果输入字段的长度为空,我会尝试取消所有剩余的 AJAX 请求。但是,我看到这个错误:

Uncaught TypeError: Cannot read property 'abort' of undefined

$("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

最佳答案

您的问题是由于 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 代码,因为如果您要覆盖 html() ,则不需要调用 empty()

此外,假设这是一种过滤系统,您可能需要考虑在所有情况下对请求使用abort(),就好像新 key 已被使用一样按下后,之前的请求不再与结果相关,可以结束 - 像这样:

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);
      }
    });
  }
});

关于javascript - 无法读取未定义的属性 'abort',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46379652/

相关文章:

javascript - 如何使用 $.get() 检测服务器重定向

php - 数据表:根据数据库值隐藏列

javascript - 在 HTML/Bootstrap 中连续滚动图像

javascript - 如何使用 jquery 从 JSON 附加嵌套 li

javascript - 跨域页面刷新

javascript - 服务器仅在表单提交时调用 preventDefault 时返回 500 错误

javascript - 加载内容和单独的内容V/S加载iframe?

jquery - :Visited 未检测到 AJAX 链接

javascript - 饼图颜色未在订阅方法内加载

javascript - 如何使用 jQuery 将所有事件按钮的值放入一个数组中