我正在构建一个用户可以发布内容的应用程序,并且帖子将使用Ajax显示在索引页面上,因此无需刷新,它适用于发布帖子的用户,但浏览网站的其他用户仍然需要刷新以查看新帖子。
这是控制器:
def index
@posts = Post.all.order('id DESC')
@post = Post.new
end
d
ef create
@post = current_user.posts.build(post_params)
@post.save
respond_to do |format|
format.html { redirect_to @post, notice: "Study request successfully added" }
format.js {}
format.json { render json: @post, status: :created, location: @post }
end
end
这是javascript
$("<%= escape_javascript(render @post) %>").prependTo("#container");
我错过了什么?
答案 0 :(得分:1)
您需要在页面中实施长轮询或使用网络套接字。
其他浏览器没有神奇地更新,因为这些页面已经加载并且不会获得任何进一步的请求。 (服务器,服务页面和加载这些页面的浏览器之间存在差异。)
如果您在页面中实施长轮询或网络套接字,则需要浏览器持续监听服务器中的更改或传入数据。
这样做,Faye,(github version of faye)似乎在过去对我有用。 (这需要你设置除rails应用程序之外的另一个服务器,它将侦听来自rails应用程序的更改调用并将其推送到侦听客户端)(如果你愿意,它还集成了长轮询)。
此外,您可以使用java脚本定期轮询更改(简单的setTimeout
,设置为每秒左右会产生大致相同的结果)。