【发布时间】:2016-02-03 15:38:11
【问题描述】:
我的视图上有一个表,我希望每 60 秒自动刷新一次。我按照this question 的答案来实现这一点。在我的表格中,我正在显示来自下面变量 @available_posts_data 的数据。
所以我有一个 Javascript 可以做到这一点:
(document).ready(function () {
setInterval(refreshPartial, 60000);
});
function refreshPartial() {
$.ajax({
url: "posts/refresh_part"
});
}
然后,在我的 Posts 控制器中,我有这些方法:
def home
@posts = Post.order(:id)
@available_posts_data = get_available_posts_data()
end
#method to refresh the tables of posts and the data.
def refresh_part
#get updated data based on posts
@available_posts_data = get_available_posts_data()
respond_to do |format|
format.js
end
end
private
def get_available_posts_data()
#this method does something with @posts and returns an array of updated data.
.
.
.
end
现在,有了以上内容,经过 60 秒刷新后,我发现我的表变成了 EMPTY。
原来refresh_part() 中的方法get_available_posts_data() 向我返回了一个空数组,因为@post 是空的!为了让它对我正常工作,我不得不修改 refresh_part 如下:
def refresh_part
#re-query for the @post variable!
@posts = Post.order(:id)
@available_posts_data = get_available_posts_data()
respond_to do |format|
format.js
end
end
为什么我需要重新设置实例变量@post?我有点期待对 posts/refresh_part url 的 Ajax 请求将指向 Post 控制器的同一个实例,并且 @posts 应该可供我使用,因为 home 函数已经设置了一次.
我在这里遗漏了一些简单的东西......在这种情况下,将@post 作为类变量@@post 会更好吗?
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax