Rails分页 - 使用params的Ajax数据输入

时间:2017-09-15 06:42:45

标签: javascript ruby-on-rails ajax pagination kaminari

所以我使用Kaminari gem在我的应用程序中实现无限滚动。我遇到的问题是每次在我的Ajax调用中给控制器一个搜索参数。

def create
@onsearch = true
@lists = current_user.lists.all
@search = params[:search]
@page = params[:page]
puts "Search is #{@search}, page is #{@page}"
@outfits =  Oufits.where("description LIKE ?", "%#{params[:search]}%").page(params[:page]).per(20)
respond_to do |format|
  format.html
  format.csv { send_data @outfits.to_csv }
  format.xls
  format.js {render :layout => false }
end

当用户滚动到页面底部时,这是我调用的ajax:

  $.ajax({
    type: "GET",
    url: url,
    data : { search : '<%= @search %>'},
    dataType: 'script',
    beforeSend: function(){
     $('.sk-wave').show();
    },
    complete: function(){
     $('.sk-wave').hide();
    },
    success: function(response){
     $('.sk-wave').hide();
     },
    error: function(jqXHR, textStatus, errorThrown ){
     alert("oh no! ajax went wrong.")
     $('.sk-wave').hide();
     console.log("jqXHR = "+JSON.stringify(jqXHR));
     console.log("textStatus = "+JSON.stringify(textStatus));
     console.log("errorThrown = "+JSON.stringify(errorThrown));
    }
  });
 }

当我使用Javascript回复时,我呈现的部分工作正常,并将其余内容完美地添加到页面中。

$('.pagecontent').append("<%=j render(partial: 'search/outfits', 
format: 'html') %>");

<% if @outfits.current_page == @outfits.total_pages %>
 $('#view-more').remove();
<% else %>
 $('#view-more a').attr('href', '<%= url_for(page: 
 @outfits.current_page + 1) %>');
<% end %>

但是经过检查,搜索参数作为文字字符串&lt;%= @ search%&gt;&#39;收到。在我的控制器中。我已经谷歌如何将erb变量传递给javascript,但它似乎对我试图做的事情太复杂了。那怎么能确保每次都通过呢?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

你有几个问题:

'<%= @search %>'无法按预期工作。 app/assets directroy中的资产文件无法访问您的views变量,因为它在部署应用程序时在服务器上进行了预编译。

<input type="hidden" id="foo" name="zyx" value="<%= @search %>" />
var value = $('input#foo').val()

要将变量传递给ajax,请使用值hidden_input的{​​{1}},并按@search获取。

jquery没有正文,这意味着您的"GET"密钥作为查询字符串传递。

使用data