是否可以使用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