无法阅读财产' abort'未定义的

时间:2017-09-23 12:37:17

标签: javascript jquery ajax

如果输入字段的长度为空,我试图取消所有剩余的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

1 个答案:

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