如何使用Ajax频繁重新加载?

时间:2012-12-16 08:33:30

标签: ruby-on-rails ruby-on-rails-3 jquery

在后台,我希望它重新加载并显示有多少未读消息的数量 我希望没有刷新页面。我的意思是使用ajax。

如果我在菜单中有这个,我怎么能每30秒刷新一次这个部分?

<li><%= link_to sanitize('<i class="icon-envelope"></i> ') + "received messages" + sanitize(' <span class="badge badge-info">'+current_user.mailbox.inbox(:read => false).count(:id, :distinct => true).to_s+'</span>'), messages_received_path  %></li>

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

2 个答案:

答案 0 :(得分:1)

您应该有一个操作,它会返回一些类似于未读消息的内容,并使用JS函数setInterval()

对其进行轮询

答案 1 :(得分:1)

这样的事情应该有效:

<强>控制器

def messages_received
  @messages = Messages.messages_received
  respond_to |format|
   format.json { render json: @messages }
  end
end  

<强> JS

 setInterval(function(){
   $.ajax({
        type: 'GET',
        url: '/messages_received',
        data: {},
        success: function(JSONRESPONSE){
            alert(JSONRESPONSE)  // @messages variable
        };
   })
 },30000)   // 30 segs