Aktualisieren der Server-seitige Anwendung Fortschritt auf Rails
-
02-07-2019 - |
Frage
Ich möchte hochladen und dann eine Datei in einem Ruby on Rails-Anwendung verarbeiten. Der Datei-Upload ist in der Regel recht kurz, aber die serverseitige Verarbeitung einige Zeit dauern kann (mehr als 20 Sekunden), damit ich mag dem Benutzer einig Indikatoren geben -. Etwas besser als eine sinnlose ‚Verarbeitung ...‘ Bildschirm
Ich versuche, den folgenden Code in der Ansicht zu verwenden
<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
:frequency => '5',
:update => "setProgress('progressBar','5')"
) %>
Der Inhalt des: update-Parameter ist der Javascript ich alle 5 Sekunden ausgeführt werden soll
und der folgende Code in den Dateien Controller
def progress_monitor
render :text => 'whatever'
end
Schließlich wird die progress_monitor Methode wird die aktuellen Fortschritte als Integer (% gesamt) zurück, und das wird in die ‚setProgress‘ übergeben wird JavaScript-Code (das ist ein auf Siebelement Update)
Allerdings ist ich kämpfen, um eine richtige Antwort erhalten von von dem Server, der dann in JavaScript übergeben werden kann.
Kann mir jemand helfen, oder bin ich das der falsche Weg anbietet?
Es ist eine Follow-up Frage kommt, ich diese Frage ursprünglich aktualisiert, aber das Update war ausreichend verschieden eine neue Frage zu rechtfertigen, hier .
Lösung
periodically_call_remote()
aktualisiert eine div
. Es wird nicht Ihre JavaScript-Funktion aufrufen. Ich bin kein JavaScript Guru, aber Ihr Problem zu lösen, sollten Sie Ihre eigenen xmlhttp
Anruf tun. Wenn ich Sie wäre, würde ich Prototyp des AJAX-Request verwenden
http://www.prototypejs.org/api/ajax/request
und verwenden JavaScript des setTimeout oder setInterval die periodische Abfrage zu tun
http://www.elated.com/ Artikel / javascript-Timer-mit-setTimeout-and-setInterval /
hoffe, das hilft cos eigentlich habe ich das gleiche PRB auch angetroffen =)
Andere Tipps
Die :update
Option sollte nur die div Liste Sie aktualisieren möchten, haben kein Javascript, die Sie auswerten möchten.
Die Rails Helfer für diese Situation immer noch sehr gut sind, gibt es keine Notwendigkeit, viele individuellen JS zu schreiben. Wenn Sie JS wollen auf Rückkehr auszuführen, wäre eine einfache Möglichkeit, eine RJS-Vorlage zu machen. Wenn Sie es mit reinem HTML tun mögen, machen Sie einfach einen Blick (oder teilweise oder Rückkehr direkt aus der render
Methode mit dem HTML-Code der Fortschrittsbalken) und setzen Sie die div der Fortschrittsbalken in der :update
Option der periodically_call_remote
Methode.