Pregunta

Quiero cargar y, a continuación, el proceso de un archivo en un Ruby on Rails app.El archivo de carga es generalmente muy corto, pero del lado del servidor, el proceso puede tardar algún tiempo (más de 20 segundos), así que quiero dar al usuario un indicador - algo mejor que un sin sentido "procesando..." en la pantalla.

Estoy tratando de utilizar el siguiente código en la vista

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
                 :frequency => '5',
                 :update => "setProgress('progressBar','5')"
                 ) %>

El contenido de el :actualización parámetro es el javascript que quiero que se ejecute cada 5 segundos

y el siguiente código en los archivos de controlador de

def progress_monitor
  render :text => 'whatever'
end

Finalmente, el progress_monitor método devolverá el progreso actual como un entero (% completa) y que será transmitido en el 'setProgress' código JavaScript (que va a actualizar un elemento de la pantalla)

Sin embargo, yo estoy luchando para conseguir una correcta respuesta desde el servidor que puede pasar en JavaScript.

Alguien puede ayudar o me estoy acercando el camino equivocado?

Hay una pregunta de seguimiento a esto, me actualizada originalmente esta pregunta, pero la actualización era lo suficientemente diferentes como para justificar una nueva pregunta, aquí.

¿Fue útil?

Solución

periodically_call_remote() las actualizaciones de un div.No llame a su función de JavaScript.Yo no soy de JavaScript gurú, sino para resolver su problema, usted debe hacer su propia xmlhttp de la llamada.Si yo fuera usted, me gustaría utilizar el prototipo de la petición AJAX

http://www.prototypejs.org/api/ajax/request

y el uso de JavaScript settimeout o setinterval para hacer el periódico de votación

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

espero que esto ayude cos en realidad me he encontrado con el mismo prb demasiado =)

Otros consejos

El :update opción sólo una lista de los div que quieres actualizar, NO tiene Javascript que se desea evaluar.

Los Rieles ayudantes son muy buenos para esta situación, no hay necesidad de escribir mucho personalizado JS.Si desea ejecutar JS en la devolución, una manera fácil sería dar una RJS plantilla.Si quieres hacerlo con HTML puro, simplemente representar un punto de vista (o parcial, o la devolución directamente desde el render método con el HTML de la barra de progreso) y poner el div de la barra de progreso en la :update la opción de la periodically_call_remote método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top