我应该如何更新AJAX调用中的分页链接?

时间:2011-04-08 22:20:32

标签: ruby-on-rails ajax ruby-on-rails-3 jquery

所以我实现了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">&laquo; 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&amp;page=3">3</a>
</span>

    <span class="next">
  <a href="/profiles/45?_=1302313302990&amp;page=3" class="next" rel="next">Next &raquo;</a>
</span>

  </nav>
");

3 个答案:

答案 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")');

这应该足够了。