我想使用jQuery在我的Rails 3应用程序中创建一个AJAX消息流。该应用程序显示帖子和帖子的回复。现在,它要求用户刷新浏览器更新:使用JQuery PeriodicUpdater和Rails的消息流
//in app/views/posts/_replies.html.erb
<div class="replies">
<% for reply in @replies %>
<div class="reply">
<p><%= reply.body %></p>
</div>
<% end %>
</div>
我试图使用PeriodicalUpdater的jQuery的端口(https://github.com/RobertFischer/JQuery-PeriodicalUpdater/)到ajaxify的回复为不断更新的流。
基于Ryan Bates的Railscast(http://railscasts.com/episodes/136-jquery),这里是我有:
// in public/javascripts/application.js
$(document).ready(function(){
$.PeriodicalUpdater('/replies', {
method: 'post',
data: ???,
minTimeout: 1000,
maxTimeout: 8000,
multiplier: 2,
type: 'json',
maxCalls: 0,
autoStop: 0
}, function(data) {
????
});
});
我是新来的JS和jQuery,所以我不清楚如何将当前帖子传递给服务器,也不知道如何让它自动呈现局部的replies
。这里是我的代码的其余部分:
// in app/views/posts/show.js.erb
$("#replies").append("<%= escape_javascript(render 'replies') %>");
// app/controllers/posts_controller.rb
class PostsController < ApplicationController
def replies
@replies = Post.find(params[:id]).replies
respond_to do |format|
format.js
end
end
end
是否有某种方式来传递当前post
到控制器的ID?甚至可能传递最后一个reply
的ID,这样服务器将只发送新的回复?
另外,我是否必须手动追加PeriodicalUpdater的回调函数中的所有内容?或者是否有办法呈现show
部分更新?
更新:我确实喜欢@Spencer下面的建议,将它改为首先有一个按钮,你推动做一个AJAX更新。
我无法通过该参数。我的实际代码查找基于一个独特的URL关键的东西,所以我只是有:
<input type="button" value="Refresh" onclick="getReplies('<%= @post.url_key %>');" />
然后在我的application.js文件:
function getReplies(url_key) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "/replies",
data: { url_key: url_key },
success: function(msg) {
$.each(msg.Replies, function(index, reply) {
$("#replies").prepend('<p>' + reply.body + '</p>')
});
}
});
}
在我的控制,我有:
def replies
@post = Post.find_by_url_key(params[:url_key])
respond_to do |format|
format.json { render :json => @post.replies }
end
end
我得到:
Processing by PostsController#replies as JSON
Parameters: {"_json"=>"url_key=some-post"}
←[1m←[35mPost Load (1.0ms)←[0m SELECT `posts`.* FROM `posts` WHERE (`posts`.`url_key` IS NULL) LIMIT 1
所以看起来像参数不从params
检索。
@Spencer谢谢!我会尝试从更简单的版本开始。我很困惑,不过你怎样和在哪里用参数调用`showTaxYear`。 – 2011-02-17 00:53:29