【问题标题】:Kill JQuery AJAX overlapping requests杀死 JQuery AJAX 重叠请求
【发布时间】:2011-10-20 18:37:14
【问题描述】:

是否可以终止之前的 ajax 请求?

我们的表格数据彼此非常接近。在每个数据的 mouseover 事件中,我们使用 JQuery Ajax 对象向我们的服务器发出请求并显示在弹出窗口中。

但是,我们经常将鼠标移动到其他表格内容,以前的 Ajax 响应显示在弹出窗口中,之前显示的确切响应是针对该表格内容的。

我需要在生成新的 Ajax 请求时终止先前的请求/响应,以便在弹出窗口中始终提供预期的最新响应。

我正在使用 JQuery、PHP 和 Mysql 来处理请求。

【问题讨论】:

标签: javascript jquery xmlhttprequest


【解决方案1】:

您能否创建一个自定义的 Javascript Sync 对象,该对象将由进行后续 ajax 调用的函数共享? 将顺序生成的 id 作为参数分配给进入的请求调用。在响应中包含相同的 id。在触发每个请求时分配一个新的 id,递增 1 或任何逻辑。如果响应中的当前 id 与共享对象中的不同;忽略响应,否则呈现响应。

这将彻底解决竞争条件。我不确定自己是否有办法过早终止请求,但至少不会造成您现在面临的渲染问题。

【讨论】:

    【解决方案2】:

    另一种选择是在第一个请求完成之前不发起另一个请求。

    【讨论】:

      【解决方案3】:

      是和不是。这就是阿贾克斯的重点。能够异步做某事。您想要做的是中止一个破坏异步想法的请求。也许您可以做的是,如果您发送另一个请求,请在某处设置一个指示请求数量的值,然后在您的请求的回调中,检查请求量是否高于 1,如果是则忽略响应。

      【讨论】:

        【解决方案4】:

        检查此AJAX Manager plugin。 XmlHttpRequest 有一个 abort() 函数,但 jQuery 没有它的包装器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-12
          • 1970-01-01
          • 2011-02-15
          • 1970-01-01
          • 2012-04-22
          相关资源
          最近更新 更多