所以我实现了AJAX分页。问题是,由于<%= paginate @videos %>
代码不在我呈现的部分内,因此不会更新分页链接。我应该用什么jQuery代码来更新分页链接?
顺便说一句,我试过$(".pagination").replaceWith('escape_javascript(<%= paginate @videos %>)');;
但我收到此错误:Uncaught SyntaxError: Unexpected token ILLEGAL
$(".pagination").replaceWith("escape_javascript(<%= paginate @videos %>)");;
会抛出此错误:Uncaught SyntaxError: Unexpected identifier
以下是浏览器看到的JS代码:
$(".pagination").replaceWith(" <nav class="pagination">
<span class="prev">
<a href="/profiles/45?_=1302313302990" class="prev" rel="prev">« Prev</a>
</span>
<span class="page first">
<a href="/profiles/45?_=1302313302990">1</a>
</span>
<span class="page current">2</span>
<span class="page last">
<a href="/profiles/45?_=1302313302990&page=3">3</a>
</span>
<span class="next">
<a href="/profiles/45?_=1302313302990&page=3" class="next" rel="next">Next »</a>
</span>
</nav>
");
答案 0 :(得分:1)
理想情况下,新的分页链接应包含在ajax调用的HTML响应中。如果那是不可能的 - 大概是因为链接位于文档的其他地方,那么我建议创建一个context / link / URI / action / whatever(免责声明:我不是ROR人),它返回一个JSON字符串,结构化的东西像:
[{"data": "The HTML output"}, {"pageLinks": "pagination HTML"}]
并将ajax调用替换为期望JSON为返回dataType
的调用。然后它应该很容易,例如:
$.ajax({
url: 'theURL',
dataType: 'json',
success: function(json) {
$('.pagination').html(json.pageLinks);
$('#someDiv').html(json.data);
}
});
答案 1 :(得分:1)
问题看起来是你使用replaceWith时的引号。在尝试使用它之前,您需要转义该字符串的字符。
你有一个双引号在replaceWith函数中开始和结束你的字符串参数,但是你输入它的字符串也有双引号,看起来不会被转义。每次遇到双引号时,它都会终止字符串并尝试将其余部分解析为javascript语句而不是字符串。
答案 2 :(得分:0)
我知道这是一个老问题,但我使用will_paginate gem遇到了一个类似的问题,我尝试了很多复杂的东西来更新分页。但是,我用一个简单的解决方案来做,也许可以帮助其他人。
总之,在div中创建一个部分调用will_paginate
助手的地方,在你的ajax请求之后,再次渲染这个部分。例如:
_pagination.html.erb
:
<div id="paginate">
<%= will_paginate @results %>
<div>
your_template.js.erb
(其中@results应该可用):
$('#paginate').html('j(render "pagination.html.erb")');
这应该足够了。