我有一个 Rails 3 应用程序,它使用 resque 在后台运行长时间运行的作业,我想在另一个页面上创建结果 View
目前我有这个场景在工作
Resque 运行一个作业并在其进行时将信息写入数据库(更新信息条目)。作业完成后,它会更新其中一个数据库条目,即设置 complete = 1(complete 的创建值为 0)
数据库模式是
create_table "refreshes", :force => true do |t|
t.string "name"
t.string "info"
t.integer "complete"
t.datetime "created_at"
t.datetime "updated_at"
end
应用程序中的另一个页面 View 将通过调用它的 Controller 并在页面上显示最新数据来显示数据库条目,如果数据库中的完整值不是,该 View 有一段逻辑插入标准的 JavaScript 刷新元素等于 1
view.html.erb
<% if @refreshes.complete == 0 %>
<meta http-equiv='refresh' content='5'>
<%end%>
<div id="data">
<p>
<b>Name:</b>
<%= @refreshes.name %>
</p>
<p>
<b>Info:</b>
<%= @refreshes.info %>
</p>
</div>
Controller 方法
def view
@refreshes = Refresh..find(params[:id])
respond_to do |format|
format.html # view.html.erb
format.xml { render :xml => @refreshes }
end
end
这一切都很好,但当 complete 设置为 0 时,它确实每 5 秒重新加载一次完整页面,而我想要做的只是刷新显示数据的 div (div id = data),而不刷新整个页面页面。
我认为这可以使用 jquery 和一些 JavaScript 来完成,但我找不到方法,所以有人可以帮忙吗?或者即使你能指出我的方向,我也会很感激 干杯 迈克
最佳答案
是的,这可以使用 JavaScript 完成。一种方法是
- 要每 n 分钟刷新一次 div,您可以使用 setInterval每 n 毫秒调用一个函数的方法。
- 此函数应发出 ajax 请求以从服务器获取数据并将数据插入 HTML。
下面的代码使用 jQuery,但您可以使用任何其他库来获取结果。
$(document).ready(function() {
// get data every 5 mins and refresh myDiv
var pingAfter = 5000;
var refreshId = setInterval(function() {
$("#myDiv").load('/partial/data');
}, pingAfter);
});
brightcherry.co.uk网站有一个示例代码来实现相同的目的。
关于javascript - 在 Rails 3 应用程序中使用 jQuery 刷新 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9032379/