是否可以使用Ajax频繁刷新部分?
在后台,我希望它重新加载并显示有多少未读消息。
我希望没有刷新页面。 我的意思是使用ajax。
如果我在菜单中有这个,我怎么能每隔30秒刷新一次这个部分?
<%= link_to sanitize(' ') + "received messages" + sanitize(' '+current_user.mailbox.inbox(:read => false).count(:id, :distinct => true).to_s+''), messages_received_path %>
messages_controller.rb
def received if params[:search] @messages = current_user.mailbox.inbox.search_messages(@search).page(params[:page]).per(10) else @messages = current_user.mailbox.inbox.page(params[:page]).per(10) end add_crumb 'Messages Received', messages_received_path @box = 'inbox' render :index end
更新: _ __ _ __ _ __ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
资产/ JavaScript的/ refresh_messages_count.js
$(document).ready(function () { // will call refreshPartial every 3 seconds setInterval(refreshPartial, 3000) }); function refreshPartial() { $.ajax({ url: "messages/refresh_part"; }) }
messages_controller.rb
def refresh_part @message_count = current_user.mailbox.inbox(:read => false).count(:id, :distinct => true) # get whatever data you need to a variable named @data respond_to do |format| format.js {render :action=>"refresh_part.js"} end end
视图/布局/ _menu.html.erb
"layouts/message_received_count" %>
视图/布局/ _message_received_count.html.erb
false).count(:id, :distinct => true) > 0 %> <%= link_to sanitize(' ') + "Received" + sanitize(' '+@message_count.to_s+''), messages_received_path %> <%= link_to sanitize(' ') + "Received", messages_received_path %>
视图/消息/ refresh_part.js.erb
$('#message_received_count').html("#{escape_javascript(render 'layouts/messages_received_count', data: @message_count)}");
您将使用setInterval发送ajax请求:
$(document).ready(function () { // will call refreshPartial every 3 seconds setInterval(refreshPartial, 3000) }); // calls action refreshing the partial function refreshPartial() { $.ajax({ url: "whatever_controller/refresh_part" }) }
然后你在控制器中做一个动作,如下所示:
def refresh_part # get whatever data you need to a variable named @data respond_to do |format| format.js end end
然后你会写一个名为refresh_part.js.haml
的js文件(你可以用erb而不是haml)。
refresh_part.js.haml看起来像这样:
$('#part_you_want_to_refresh').html("#{escape_javascript(render 'name_of_partial', data: @data)}");
确保在routes.rb
设置正确的路由。
仅供参考,refresh_part.js.erb看起来像这样:
$("#part").html("<%= escape_javascript(render 'partial', data: @data) %>");
代替:
$('#part').html("#{escape_javascript(render 'partial', data: @data)}");
另外,我们可以使用“escape_javascript”的别名来简化:
$("#part").html("<%= j(render 'partial', data: @data) %>");
是的你可以
This page will refresh every 5 seconds. This is because we're using the 'onload' event to call our function. We are passing in the value '5000', which equals 5 seconds.
But hey, try not to annoy your users too much with unnecessary page refreshes every few seconds!
资料来源: http : //www.quackit.com/javascript/javascript_refresh_page.cfm