所以我使用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,但它似乎对我试图做的事情太复杂了。那怎么能确保每次都通过呢?谢谢你的帮助
答案 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
。