È ansible aggiornare parziali frequentemente usando Ajax?

In background, lo voglio ricaricare e mostra il numero di quanti messaggi non letti ci sono.
Lo voglio senza una pagina di aggiornamento. Intendo usare l’ajax.

Se avessi questo nel menu, come posso aggiornare solo questa sezione ogni 30 secondi?

  • <%= 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 

    AGGIORNAMENTO: _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _

    attività / 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 

    views / layout / _menu.html.erb

      "layouts/message_received_count" %> 

    views / layout / _message_received_count.html.erb

      false).count(:id, :distinct => true) > 0 %> 
  • <%= link_to sanitize(' ') + "Received" + sanitize(' '[email protected]_count.to_s+''), messages_received_path %>
  • <%= link_to sanitize(' ') + "Received", messages_received_path %>
  • views / messaggi / refresh_part.js.erb

     $('#message_received_count').html("#{escape_javascript(render 'layouts/messages_received_count', data: @message_count)}"); 

    Userai setInterval per inviare la richiesta 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" }) } 

    Quindi fai un’azione in un controller come questo:

     def refresh_part # get whatever data you need to a variable named @data respond_to do |format| format.js end end 

    allora scriverai un file js chiamato refresh_part.js.haml (potresti erb invece di haml).

    refresh_part.js.haml sarebbe simile a questo:

     $('#part_you_want_to_refresh').html("#{escape_javascript(render 'name_of_partial', data: @data)}"); 

    assicurati di aver impostato i percorsi corretti in routes.rb .

    Cordiali saluti, refresh_part.js.erb sarebbe simile a questo:

     $("#part").html("<%= escape_javascript(render 'partial', data: @data) %>"); 

    invece di:

     $('#part').html("#{escape_javascript(render 'partial', data: @data)}"); 

    inoltre, possiamo usare l’alias di “escape_javascript” per semplificare questo:

     $("#part").html("<%= j(render 'partial', data: @data) %>"); 

    si, puoi

          

    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!

    Fonte: http://www.quackit.com/javascript/javascript_refresh_page.cfm