所以我使用 Kaminari gem 在我的应用程序中实现无限滚动。我遇到的问题是每次在 Ajax 调用中都向 Controller 提供搜索参数。
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 %>
但经过检查,搜索参数在我的 Controller 中以文字字符串“<%= @search %>”形式接收。我已经在谷歌上搜索了如何将 erb 变量传递给 javascript,但对于我想要做的事情来说,它似乎太复杂了。那我怎样才能确保每次都通过呢?感谢您的帮助
最佳答案
您有几个问题:
'<%= @search %>'
没有按你的预期工作。 app/assets
中的 Assets 文件directroy 无法访问您的 View 变量,因为它是在部署应用程序时在服务器上预编译的。
<input type="hidden" id="foo" name="zyx" value="<%= @search %>" />
var value = $('input#foo').val()
将变量传递给 ajax
使用hidden_input
值为@search
,并通过 jquery
获取它.
"GET"
没有 body ,这意味着你的data
键作为查询字符串传递。
使用"POST"
.
关于javascript - Rails 分页 - 带参数的 Ajax 数据输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233276/