【问题标题】:Do not send Ajax request until same previous Ajax request is done在完成之前的相同 Ajax 请求之前不要发送 Ajax 请求
【发布时间】:2014-07-30 23:44:24
【问题描述】:

当用户向下滚动页面到最后一篇文章时,我想动态加载“更多文章”。 - 这部分已经完成...

问题是用户当然可以来回滚动,或者只是一次又一次地滚动......这会在不需要时导致多个 ajax 请求。

如何检查相同的 ajax 调用是否尚未运行?

【问题讨论】:

  • 您可以使用按钮而不是检查滚动位置
  • 仅在单击按钮时禁用按钮并在 ajax 调用成功启用按钮中这将停止多次单击
  • 只使用另一个变量? var isLoading = falsefunction ajaxLoad() { if (isLoading) return; isLoading = true; <snip>; isLoading = false; }
  • @jave.web 只要您在 Javascript 的主线程中阻塞(例如,在异步回调之前设置 isLoading = true),就不会。由于 Javascript 的单线程特性,永远不可能发生冲突。

标签: javascript jquery ajax


【解决方案1】:

只要使用这样的东西:

var loading = false;

var postLoader = function() {
    if (loading == false) {
        loading = true;

        $.ajax({

            // ajax options...

        }).always(function() {
            loading = false;
        });
    }
}

【讨论】:

  • 我考虑过使用全局,但由于这些 ajax 调用是异步的 - 不会有冲突吗?
  • 什么和什么之间的冲突?您只是在更改 loading 的值。如果loading 为真,则中止任何可能由滚动操作触发的后续ajax 调用。如果您出于某种原因需要在多个模块中设置loading,请使用trigger 发布它。
  • 我已经更新了答案。变量 loading 不必为此全局变量。
  • a) 延迟分配导致的两个 ajax 调用冲突 - 我想问是否会发生诸如“条件、其他条件、分配、其他地方分配”之类的处理? b) 我认为加载必须是全局的,因为 ajax 调用是在 EVENT 上调用的?
猜你喜欢
  • 1970-01-01
  • 2012-07-04
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多