【问题标题】:Infinite scroll and will_paginate appending the 'next page' of items multiple times无限滚动和 will_paginate 多次附加项目的“下一页”
【发布时间】:2012-11-25 20:21:56
【问题描述】:

我正在关注this railscast,试图在我的 Rails 应用程序上实现无限滚动页面。当用户向下滚动到页面底部时,会附加一组新的项目并且页面会扩展,但是它会多次附加到页面,并且即使数组中的所有项目都已加载,事件也会在向下滚动时再次触发, 将同一组项目再次附加多次。

我想要的是每次用户滚动到底部时附加项目的“下一页”,并在用户再次滚动到底部时附加后续页面。

这里是这个函数的 jQuery:

jQuery ->
  if $('.pagination').length
          $(window).scroll ->
                  url = $('.pagination .next_page').attr('href')
                  if url &&  $(window).scrollTop() > $(document).height() - $(window).height() - 50
                      $('.pagination').text('Fetching more products...')
                      $.getScript(url)
$(window).scroll()

这里是对应的javascript

$('#products').append('<%= j render(@products) %>');
<% if @products.next_page %>
    $('.pagination').replaceWith('<%= j will_paginate(@products) %>');
<% else %>
    $('.pagination').remove();
<% end %>

【问题讨论】:

标签: javascript jquery ruby-on-rails coffeescript will-paginate


【解决方案1】:

当用户从底部滚动到 50 像素时,您的代码将触发 $.getScript(url) 调用。如果他们从底部滚动到 49px,则再次调用。然后另一个如果他们从底部滚动到 48px,这将一直持续到一个 AJAX 调用返回并使页面变高;一旦页面变高,您将超出 50 像素区域,获取更多产品... 将停止。

您一次只需要一个getScript。一旦他们滚动到 50px 区域,您想从服务器获取更多内容(仅一次)然后忽略后续滚动,直到服务器响应。

你应该做更多这样的事情:

$(window).scroll ->
    # Bail out right away if we're busy loading the next chunk.
    return if(window.pagination_loading)

    url = $('.pagination .next_page').attr('href')
    if url &&  $(window).scrollTop() > $(document).height() - $(window).height() - 50
        # Make a note that we're busy loading the next chunk.
        window.pagination_loading = true

        # Load as before but attach a callback to clear the flag when we're done.
        $('.pagination').text('Fetching more products...')
        $.getScript(url).always -> window.pagination_loading = false

$.getScript 返回一个jqXHR,当底层$.ajax 调用完成时,将调用jqXHRalways 回调。

【讨论】:

  • 谢谢,这在本地解决了我的问题,但是当通过 heroku 部署时,无尽的页面功能停止工作并且根本不附加下一页。关于可能导致此问题的任何想法?再次感谢您的帮助
  • @allareri:getScript 被叫到了吗?服务器端控制器是否被调用?控制台中有任何 JavaScript 错误或警告吗?您是否尝试将错误回调附加到 $.getScript 调用?
  • @muistooshort 我遇到了同样的类似问题,并遵循了您的上述建议。但是现在无限滚动不起作用,因为 if condition 不满足,因为返回的 url 未定义。如果您可以看看我的要点,请:gist.github.com/anonymous/e6b56f1bccf754a865eb
  • @user532339:你还有.pagination .next_page 元素吗?它有href 属性吗?
  • @TimmyVonHeiss:你的意思是在 JavaScript 中?看看coffeescript.org的“TRY COFFEESCRIPT”标签。
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
相关资源
最近更新 更多