【问题标题】:Load more repeating same values加载更多重复相同的值
【发布时间】:2013-10-29 08:19:50
【问题描述】:

单击 loadmore div 时,我正在尝试加载更多 cmets。当我单击 Loadmore 时,此代码渲染的值与我最初渲染的相同。例如,如果我最初渲染 10 cmets,当我单击 load more 时,它​​会渲染相同的 10 cmets。

在 index.html.erb 中

<div class="main-content"><%= render :partial => 'comment' %></div>
<div class="loadmore" onclick="send()">Loadmore</div>

在 _comment.html.erb 中

 <% @comments.each do |comment| %>
 <%= comment.comments %>
 <%= end %>

在我的控制器中

@comments = Comment.paginate(:per_page => 10, :page => params[:page]).all(:order => 'updated_at DESC')
respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @comments }
end

在 JavaScript 中

function send(){

     $.ajax({
        url: '<%= escape_javascript comments_path(:page =>(@comments.current_page)+1) %>',
        type: 'GET',
        dataType: 'json',           
        success: function(){                     
                 $(".main-content").append("<%= escape_javascript render :partial => 'comment' %>");
            }       
    });
}

如果代码有误,请向我推荐正确的代码。

【问题讨论】:

  • 我想@cmets.current_page 在您单击按钮时执行,因此它检查页面参数并且它仍然相同,它是空的。每次单击按钮时尝试更新 div#loadmore 属性中的 data-page 属性
  • 但我的页面参数传递为 2,我的日志中的查询格式也是正确的,但它附加了相同的值
  • 当您单击按钮时,您能否显示发送到服务器的实际参数和执行的 SQL 查询?
  • 参数{"page"=&gt;"2", "amp"=&gt;nil},查询SELECT "comments".* FROM "comments" ORDER BY updated_at DESC LIMIT 10 OFFSET 10
  • 以及下次点击时,参数和sql请求是什么?

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

您的params[:page] 不会在您每次点击按钮时更新,您需要重置您的params[:page],并在每次传递之前添加offset

【讨论】:

  • params[:page] 正在重置,因为我的日志中的查询格式正确
  • 如果这是您的查询,我认为它应该可以正常工作SELECT "comments".* FROM "comments" ORDER BY updated_at DESC LIMIT 10 OFFSET 10。您能否在每次点击 loadmore 时检查查询并查看查询中设置的 offset 的值..
  • 每次点击都会得到相同的参数和相同的查询,并呈现相同的值。
  • 这是您的问题,您的偏移量需要在每次查询命中时更改,查看您的偏移量变量的设置位置,并在每次命中时更新偏移量值,如下所示:offset+=10
  • 第一次更新偏移量,但它呈现相同的前 10 个值,如果需要更新,我该如何以及在哪里执行此操作?
【解决方案2】:

我想说你可以试试这个:

<div class="main-content"><%= render :partial => 'comment' %></div>
<div class="loadmore" onclick="send()" id="loadmore_button" data-page="2">Loadmore</div>

之后在 javascript 中你需要获取当前页面,并更新旧值以使用新页面数据

function send(){
 var pager = $("#loadmore_button").data("page")
 $.ajax({
    url: '<%= escape_javascript comments_path %>?page='+pager,
    type: 'GET',
    dataType: 'json',           
    success: function(){                     
      $(".main-content").append("<%= escape_javascript render :partial => 'comment' %>");
      $("#loadmore_button").data("page", parseInt(pager)+1)
    }       
  });
} 

【讨论】:

  • 没有改进,又是一样的。
  • 请在服务器端提供参数和SQL
  • Parameters: {"page"=&gt;"2"}, SELECT "comments".* FROM "comments" ORDER BY updated_at DESC LIMIT 10 OFFSET 10
猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 2012-12-09
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多