javascript - jquery getScript(url) 重复调用

标签 javascript jquery

我有这段jquery代码实现了页面上的无限滚动:

paginate = function() {
  if ($('.pagination').length) {
    $(window).scroll(function() {
      var url;
      url = $('.pagination a.next_page').attr('href');
      if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) {
        $('.loader').removeClass('hidden');
        return $.getScript(url);
      }
    });
    return $(window).scroll();
  }
};

$(document).on("page:load ready", paginate);

问题是,当调用这个函数时,我在developer_tools/network中看到2个对同一url的get请求,这种情况是随机发生的,可能是1个请求,也可能是2个请求。

enter image description here

这几天找不到解决办法。迫切需要帮助。

最佳答案

嗯,在脚本加载完成之前,理论上可以多次触发滚动事件。解决这个问题的一种方法是:

paginate = function() {
  if ($('.pagination').length) {
    $(window).scroll(scrollHandler);
    return $(window).scroll();
  }
};

scrollHandler = function() {
  var url;
  url = $('.pagination a.next_page').attr('href');
  if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) {
    $('.loader').removeClass('hidden');
    $(window).unbind('scroll');
    return $.getScript(url, function() {
      $(window).bind(scrollHandler);
    });
  }
};

其背后的想法是在请求脚本时取消绑定(bind)滚动事件,并在加载脚本后重新绑定(bind)它。

关于javascript - jquery getScript(url) 重复调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26186357/

相关文章:

javascript - 在不允许通过 URL 手动更改的情况下启用后退按钮

javascript - 如何使用用户输入更改 iframe 链接的最后一部分?

javascript - 在偶数监听器 block 中绑定(bind)和解除绑定(bind)

javascript - 动态更改 Bootstrap 弹出窗口的模板

javascript - 表单数据未发布到 $.ajax url

javascript - 比较两个数组的值并相应地创建对象

javascript - ExtJS:如何自定义组合框选择器的键导航?

javascript - 如何显示错误消息,直到输入(文本)的 URL 格式正确?在 Angular js 中

javascript - 将输入键绑定(bind)到 asp 网络链接按钮转发器

javascript - 切换元素时如何进行转换?