2012-07-07 6 views
16

Tengo muchas formas diferentes en mi aplicación, todas ellas usan remote: true. Pero uno no funciona correctamente, porque no usa una llamada ajax.form_tag con control remoto: verdadero no hace una solicitud de Ajax

limpiado, que parece:

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

La etiqueta se parece 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> 

Y la entrada rutas:

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

Pero el control de la llamada en Chrome Herramientas de desarrollo , el encabezado dice:

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

y no como las otras formas se parecen:

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

añadí los archivos js a mi diseño

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

E incluso si quito toda mi código JS de las application.js archivo (excepto el //= require jquery ...), el formulario no funciona correctamente.

¿Qué extrañe?

Respuesta

25

No puede usar AJAX para cargas de archivos. Eso es, normalmente.

Hay una gema impresionante, Remotipart, que agrega esta funcionalidad a sus formas remotas.

gem 'remotipart', '~> 1.0' 

En application.js

//= require jquery.remotipart 
+0

Mea culpa, se me olvidó esto. Grrr ... ¡Gracias! – Bjoernsen

+0

Acabas de ahorrarme horas de frustración. Ni siquiera sabía que no podías usar ajax para subir archivos. Acabo de probar con Rails 4.2.5 y esto todavía funciona. Literalmente se retiró en remotipart y mi forma comenzó a funcionar. ¡Gracias! –

2

El problema que experimentas es debido al hecho de que los archivos no pueden ser presentadas por peticiones AJAX.

Usted puede tratar de utilizar Jquery Form plugin para subir archivos a través de peticiones AJAX utilizando el método ajaxSubmit proporcionado por el plugin

Cuestiones relacionadas