utiliza sirve script que para paginas hace funciona español ecmascript con como javascript ruby-on-rails ajax xmlhttprequest

javascript - sirve - Actualización del progreso del lado del servidor en la aplicación Rails



que es ecmascript (2)

Quiero subir y luego procesar un archivo en una aplicación de Ruby on Rails. La carga del archivo suele ser bastante corta, pero el procesamiento del lado del servidor puede llevar algo de tiempo (más de 20 segundos), por lo que quiero darle al usuario algún indicador, algo mejor que una pantalla sin sentido de "procesamiento ...".

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

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

El contenido del parámetro: update es el javascript que quiero ejecutar cada 5 segundos

y el siguiente código está en el controlador de archivos

def progress_monitor render :text => ''whatever'' end

Finalmente, el método progress_monitor devolverá el progreso actual como un entero (% completado) y se pasará al código javascript ''setProgress'' (que actualizará un elemento en pantalla)

Sin embargo, estoy luchando para obtener una respuesta correcta del servidor que luego se puede pasar a javascript.

¿Alguien puede ayudar, o me estoy acercando a esto de la manera incorrecta?

Hay una pregunta de seguimiento para esto, originalmente actualicé esta pregunta, pero la actualización fue lo suficientemente diferente como para justificar una nueva pregunta, aquí .


La opción de :update solo debe mostrar el div que desea actualizar, NO tiene el Javascript que desea evaluar.

Los ayudantes de Rails siguen siendo muy buenos para esta situación, no es necesario escribir mucho JS personalizado. Si desea ejecutar JS al regresar, una forma fácil sería renderizar una plantilla RJS. Si desea hacerlo con HTML puro, simplemente renderice una vista (o parcial, o devuelva directamente desde el método de render con el HTML de la barra de progreso) y coloque el div de la barra de progreso en la opción :update del método periodically_call_remote .


periodically_call_remote () actualiza un div. No llamará a su función javascript. No soy javascript guru, pero para resolver su problema, debe hacer su propia llamada a xmlhttp. Si yo fuera tú, usaría la solicitud de Ajax del prototipo

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

y usa settimeout o setinterval de javascript para realizar el sondeo periódico

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

Espero que esto ayude a cos en realidad me he encontrado con el mismo prb también =)