2009-09-04 30 views

Respuesta

7

Seguramente es posible, here Tiene un tutorial y un par de enlaces a complementos.

19

Si está utilizando Rails 3, he escrito un complemento que hace que las cargas de archivos de estilo AJAX sean relativamente triviales para implementar.

http://rubygems.org/gems/remotipart

+0

Bastante impresionante - Qué sabes de algún prototipos de soluciones similares? Esto es realmente algo útil. –

+0

No conozco ninguna solución de estilo de prototipo, pero el código de jQuery fue tan trivial de implementar que no me imagino que sería difícil de modificar. Si desea ayudar, siéntase libre de bifurcar Remotipart en github y lo fusionaré en trunk. http://github.com/formasfunction/remotipart – leppert

+0

Nota para aquellos que leen esta publicación: remotipart tiene errores importantes (como: no funciona con varios niveles de texto entre comillas, que se conoce desde hace 2 años) y el propietario del repositorio no está activo tratando de arreglar esto Así que considere esto antes de perder horas (como yo) implementando luego reemplazándolo con otra solución. – Benj

0

en realidad no es necesario el uso de algunos plugins especiales para ello. La manera más fácil de hacer la carga de imágenes ajax para mí fue simplemente hacer que la carga de imágenes actuara como ajax. Para eso uso el plugin jQuery ajaxForm: http://www.malsup.com/jquery/form/ Luego de regresar a la imagen cargada js y ponerla en su página.

Por lo tanto, usted debe tomar su forma sea ajaxForm:

$('#uploader').ajaxForm({dataType: "script", 
     success: ajaxFormErrorHandler, 
     error: ajaxFormSuccessHandler 
} 

controler se ve así:

def add_photo 
    @photo = PhotosMeasurement.new(params[:user_photo]) 
    respond_to do |format| 
     if @photo.save 
     format.json { render :json => @photo} 
     else 
     format.json { render :json => nil} 
     end 
    end 
    end 

y en ajaxFormSuccessHandler sólo tiene que obtener la imagen de objeto:

var photo = jQuery.parseJSON(responseText.responseText); 

y poner foto donde quieras:

target.find('.addPhoto').before(''+ 
     '<input class="imageId" type="hidden" value='+photo.id+' > '+ 
     '<img src='+photo.photo.thumb.url+' alt="Thumb_1"> '); 

P.S: No sé realmente por qué, pero si regresa al manejador ajaxForm algo, maneja esa solicitud como ERROR no SUCCESS.

P.P.S: seguramente el plugin jQuery-File-Upload hace más, pero si no necesita todo eso, puede usarlo de esta manera.

P.P.P.S: usted debe tener la carga de archivos no ajax ya es funcional para hacer eso =)