2012-07-07 17 views
16

Ho molte forme diverse nella mia app, tutte usano remote: true. Ma uno non funziona correttamente, perché non usa una chiamata Ajax.form_tag con remote: true non effettua una richiesta Ajax

ripulito, sembra che:

<%= form_tag(upload_file_ajax_path, remote: true, multipart: true) do %> 
    <%= file_field_tag(:file) %> 
    <%= submit_tag("upload") %> 
<%end%> 

Il tag è simile a:

<form accept-charset="UTF-8" action="/mycontroller/upload_file_ajax" data-remote="true" enctype="multipart/form-data" method="post"> 
    <input name="utf8" type="hidden" value="✓"> 
    <input name="authenticity_token" type="hidden" value="1234"></div> 
    <input id="file" name="file" type="file"> 
    <input name="commit" type="submit" value="upload"> 
</form> 

E la voce itinerari:

post "mycontroller/upload_file_ajax", as: "upload_file_ajax" 

Ma il controllo della chiamata in Chrome Dev Tools , l'intestazione dice:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

e non come le altre forme assomigliano:

Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript 

ho aggiunto i file js al mio layout

<%= stylesheet_link_tag "application", :media => "all" %> 
<%= javascript_include_tag "application" %> 
<%= csrf_meta_tags %> 

E anche se mi tolgo tutto il mio codice JS fuori dalle application.js file (eccetto lo //= require jquery ...), il modulo non funziona correttamente.

Cosa mi sono perso?

risposta

25

Non è possibile utilizzare AJAX per i caricamenti di file. Cioè, normalmente.

C'è una gemma straordinaria, Remotipart, che aggiunge questa funzionalità ai moduli remoti.

gem 'remotipart', '~> 1.0' 

In application.js

//= require jquery.remotipart 
+0

Mea culpa, ho dimenticato questo. Grrr ... Grazie! – Bjoernsen

+0

Mi hai appena risparmiato ore di frustrazione. Non sapevo nemmeno che non si potesse usare ajax per i caricamenti di file. Appena testato con Rails 4.2.5 e funziona ancora. Remotipart letteralmente lasciato cadere e il mio modulo ha iniziato a funzionare. Grazie! –

2

Il problema che esperienza è dovuto al fatto che i file non possono essere presentate da richieste AJAX.

Si può provare a utilizzare Jquery Form plugin per caricare i file tramite richiesta AJAX utilizzando il metodo ajaxSubmit fornita dal plugin

Problemi correlati