Monitoraggio di un processo lato server sull'applicazione Rails utilizzando AJAX XMLHttpRequest
-
02-07-2019 - |
Domanda
Sto utilizzando quanto segue nella pagina Web ma non riesco a ottenere una risposta dal server durante l'elaborazione
<script type="text/javascript">
<!--
function updateProgress() {
//alert('Hello');
new Ajax.Request('/fmfiles/progress_monitor', {
parameters: 'authenticity_token=' + encodeURIComponent(AUTH_TOKEN),
onSuccess: function(response) {
alert(response.responseText);
fillProgress('progressBar',response.responseText);
}
});
}
//-->
</script>
<% form_for( :fmfile, :url => '/fmfiles', :html => { :method => :post, :name => 'Form_Import', :enctype => 'multipart/form-data' } ) do |f| %>
...
<%= f.file_field :document, :accept => 'text/xml', :name => 'fmfile_document' %>
<%= submit_tag 'Import', :onClick => "setInterval('updateProgress()', 2000);" %>
Il metodo 'create' in fmfiles_controller.rb quindi elabora felicemente il file e ottiene i risultati giusti (secondo il pulsante di invio sul modulo). Se decomprimo la riga '// alert (' Hello ')' ricevo una finestra di dialogo che dice Hello ogni 2 secondi ... come previsto.
Tuttavia, il server non registra mai alcuna chiamata al metodo "progress_monitor" in "file" nemmeno un tentativo fallito.
Se faccio clic sul collegamento
<a href="#" onclick="updateProgress();">Run</a>
effettua una chiamata al server, riceve una risposta e visualizza la finestra di dialogo, quindi suppongo che i percorsi, la sintassi e la denominazione siano tutti OK.
Non so davvero perché non funzioni. È perché 2 metodi nello stesso controller vengono chiamati tramite URL?
Sto usando Rails 2.1.0 in un ambiente di sviluppo su OS X 10.5.5 e sto usando Safari 3.1.2
(NB Questo fa seguito a un'altra question , ma io penso che sia sufficientemente diverso da meritare la sua stessa domanda.)
Soluzione
Se non vedi messaggi nel tuo file di registro per la chiamata a 'progress_monitor', è possibile che la richiesta non venga mai inviata.
Prova questo:
-
Prova a utilizzare l'URL completo anziché l'URL relativo per Ajax.Request. Ho avuto problemi con gli URL relativi su alcuni browser con Ajax.Request.
-
Abilita Firebug o IE Developer Toolbar. Dovresti essere in grado di vedere se la chiamata a progress_monitor funziona o meno. Se c'è un errore di script Java, vedrai chiaramente l'errore usando questi strumenti.