【问题标题】:Ignoring old multiple asynchronous ajax requests忽略旧的多个异步 ajax 请求
【发布时间】:2010-03-17 20:20:28
【问题描述】:

我有一个自定义的 javascript 自动完成脚本,它通过多个异步 ajax 请求访问服务器。 (每次按下一个键。)

我注意到有时较早的 ajax 请求会在稍后的请求之后返回,这会使事情变得混乱。

我现在处理这个问题的方式是我有一个计数器,它会随着每个 ajax 请求而递增。以较低计数返回的请求将被忽略。

我想知道:这合适吗?或者有没有更好的方法来处理这个问题?

提前致谢,

特拉维斯

【问题讨论】:

  • 我认为每次按下一个键时发送一个 ajax 请求是当您同时拥有几个用户时使 yoru 服务器超载的秘诀。尝试通过设置延迟计时器来限制事物,以便仅在半秒内未按下任何键时才发送请求,然后当用户停止键入时您只会得到一次点击。例如,此评论可能会创建 383 次服务器点击...
  • @Karl,同意,但这仍然可能是个问题。

标签: javascript ajax asynchronous


【解决方案1】:

您可以存储一个“全局”currentAjaxRequest,它保存最后一个 XHR 请求的结构。然后你可以abort当前请求,当你发出一个新请求时。

例如:

var currentAjaxRequest = null;

function autoCompleteStuff() {
    if(currentAjaxRequest !== null) {
        currentAjaxRequest.abort();
    }

    currentAjaxRequest = $.get(..., function(...) {
        currentAjaxRequest = null;

        ...
    });
}

为避免命名冲突,如有需要,请将其包装在一个匿名的、即时执行的函数中。

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2015-01-17
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多