2011-04-08 25 views
1

所以我实现了AJAX分页。问题是由于<%= paginate @videos %>代码不在我渲染的部分中,所以分页链接不会更新。我应该使用哪些jQuery代码来更新分页链接?我应该如何更新AJAX调用中的分页链接?

顺便说一句我试过$(".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> 
"); 
+0

上面的jQuery示例是否返回客户端,首先评估标签(<%= %>)?他们是有效的页码或任何内容应该是?目前还不清楚您是将服务器端与客户端脚本混合还是将评估后的代码返回给客户端。 – Jake 2011-04-08 22:41:15

+0

是的,它应该首先评估...它在我的show.js.erb文件 – 2011-04-08 22:42:14

回答

1

理想,新的分页链接应该包含在ajax调用的HTML响应中。如果这是不可能的 - 大概是因为链接驻留在文档的其他地方,那么我会建议创建一个context/link/URI/action/whatever(声明:我不是ROR人),它返回一个JSON字符串,像:

[{"data": "The HTML output"}, {"pageLinks": "pagination HTML"}] 

,并更换其中一个预计JSON作为返回dataType你的Ajax调用。那么它应该很容易,例如:

$.ajax({ 
    url: 'theURL', 
    dataType: 'json', 
    success: function(json) { 
     $('.pagination').html(json.pageLinks); 
     $('#someDiv').html(json.data); 
    } 
}); 
+0

呃复杂...我不是最好的与json – 2011-04-08 22:52:04

+0

没什么,显然。看看:http://www.simonecarletti.com/blog/2010/04/inside-ruby-on-rails-serializing-ruby-objects-with-json/ – karim79 2011-04-08 22:55:11

1

该问题看起来是你在使用replaceWith时的引号。在尝试使用它之前,您需要转义该字符串的字符。

在replaceWith函数中,你有双引号开始和结束字符串参数,但是你喂它的字符串也有双引号,在那些看起来不会被转义的地方。每次遇到双引号时,都会终止该字符串,并试图将其余解析为javascript语句而不是字符串。

+0

我不认为这是问题..请你举个例子。 – 2011-04-08 22:51:49

+0

更详细地更新了答案。 – Jake 2011-04-08 22:56:29

+0

我实际上表明使用单引号也会引发错误。 – 2011-04-08 22:57:52

0

我知道这是一个老问题,但我遇到了使用will_paginate gem的类似问题,我尝试了很多复杂的东西来更新分页。但是,我用一个简单的解决方案来做到这一点,或许可以帮助其他人。

综上所述,创建一个部分,你可以在div内部调用will_paginate helper,并且在你的ajax请求之后,再次渲染这个部分。例如:

_pagination.html.erb

<div id="paginate"> 
    <%= will_paginate @results %> 
<div> 

your_template.js.erb(其中@Results应提供):

$('#paginate').html('j(render "pagination.html.erb")'); 

这应该是足够的。

相关问题