2011-01-17 5 views
0

Ich habe eine Rails 3-Anwendung, die eine lange Aufgabe von mehreren Abfragen an eine Datenbank durchführt, um Dokumente zu finden. Ich möchte dem Benutzer den Fortschritt der Abfrage anzeigen. Ich habe eine jquery-Funktion erstellt, die die jquery.ui.progressbar verwendet. Ich möchte den Fortschrittsbalken dynamisch aktualisieren, während der Dokumentensuch-Controller die Suchphrasen durchläuft. Ich muss wissen, wie man das Javascript dynamisch anruft, um das Fortschrittsbalken-Div in der Dokumentenansicht zu aktualisieren. Bitte lassen Sie mich wissen, wie Sie das Javascript vom Rails Controller aufrufen.Wiederholte Aktualisierung einer Seite div in Rails vom Controller

Antwort

2

Sie können keine Remote-Funktion von Ihrem Server aus aufrufen, es sei denn, sie antwortet auf eine Anforderung. Daher müssen Sie häufig Anfragen von der Anwendung an Ihren Server senden, den Fortschritt der Suche überprüfen und entsprechend reagieren. Wenn Sie nicht über mehr als 10 Sekunden sprechen, würde ich wirklich für einen Spinner gehen, da es viel einfacher und genauso intuitiv ist.

Edit:

Beispiele, wie Sie Ihre Seite in Reaktion auf Ajax-Polling

#some_controller.rb 

def check_download_progress 
    #some_method 
end 

# javascript erb file. views/some_controller/check_download_progress.js.erb 
# You can mix js and ruby and send it as a response to an ajax call; examples: 

#check_download_progress.js.erb 

<%- if @some_value.present? -%> 
    $('#progress_bar').addClass('<%= @some_value -%>'); 
<%- end -%> 

#or simply call a function 

my_remote_function(<%= @some_value -%>); 
+0

Diese Aufgabe tut nicht in einem Formular-Tag ausgeführt. Gibt es eine andere Art und Weise? – user437969

+0

Ich habe kein Formular-Tag erwähnt. Sie könnten zum Beispiel eine ID zu einem HTML-Element hinzufügen, deren Vorhandensein auf dem Dokument bereit feststellen und den Server abfragen, um den Status der Suche zu überprüfen. – mark

+0

Ich entschuldige mich für das Missverständnis Sie antworten. Ich habe eine JavaScript-Funktion geschrieben, die abfragt und das Polling funktioniert. Ich muss nur einen Weg finden, um den Aktualisierungswert vom Controller zu übergeben. – user437969

0

In Ihrer Rails-Aktion aktualisieren können Sie RJS verwenden:

# Your AJAX action in controller. 
def update_progress_bar 
    render :update do |page| 
    page.call 'java_script_method_name', 'param1', 'param2', etc. 
    end 
end 
+0

Danke für Ihre Antwort. Ich möchte keinen Prototyp verwenden. Weiß jemand, wie man das selbe mit unverbaubarem Javascript und jQuery macht? – user437969

Verwandte Themen