1

我一直在尝试调节keyup事件中 ajax 响应的数量,以优化性能。基本上,我要做的是跟踪当前是否有任何 AJAX 请求正在进行中,如果有,则中止以前的请求,因此只有一个 ajax 请求最终在任何给定时间完成。我当前的实现似乎并没有取消以前的 ajax 请求。我很感激任何关于我做错了什么以及如何解决它的建议。

提前谢谢了!

var ajaxReq = null;

$(".invoice-wrapper").on("keyup", ".prod-name-input", $.throttle(800, function () {
    searchword = $(this).val();

    if ((searchword.length) >= 3) {
        if (ajaxReq != null) ajaxReq.abort();
        var ajaxReq = $.ajax({
            url: "ajax/data.php?searchword=" + searchword,
            dataType: "html",
            success: function (data) {
                $last.next('.suggestions').html(data);
            }
        });
    }
}));
4

4 回答 4

2

您正在完整回调中重新定义 ajaxReq var,这使得 if 语句始终为 false,这意味着您永远不会中止任何 ajax 请求。只需在完整的回调中删除varfrom 。ajaxReq

/*var */ajaxReq = $.ajax({
于 2013-09-19T15:00:12.970 回答
0

尝试

var ajaxReq = null;
$(".invoice-wrapper").on("keyup",
    ".prod-name-input",
    $.throttle(800, function () {
  searchword = $(this).val();
  if ((searchword.length) >= 3) {
    if (ajaxReq === null) {
      ajaxReq = $.ajax({
        url: "ajax/data.php?searchword=" + searchword,
        dataType: "html",
        success: function (data) {
          $last.next('.suggestions').html(data);
          ajaxReq = null;
        }
      });
    }
  }
}));

ajaxReq仅在是时发送请求的想法null

于 2013-09-19T14:46:14.730 回答
0

你的变量“ajaxReq”是一个全局变量,你应该在AJAX成功后再次赋值“null”,否则,“ajaxReq”对象是单独的。

success: function (data) {
    $last.next('.suggestions').html(data);
    ajaxReq = null;
 }
于 2013-09-19T14:48:11.250 回答
0

尝试这个。

if ((searchword.length) >= 3) {
        if (ajaxReq != null) ajaxReq.abort();
        var ajaxReq = $.ajax({
            url: "ajax/data.php?searchword=" + searchword,
            dataType: "html",
            success: function (data) {
                 ajaxReq = null;
                $last.next('.suggestions').html(data);
            },
           error:function(){
                ajaxReq = null;
            }
        });
    }
于 2013-09-19T14:51:29.077 回答