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 .

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top