2009-02-15 32 views
6

Estoy intentando enviar un formulario a través de jQuery. Mi formulario contiene campos y un archivo que debe cargarse. Es del tipo ENCTYPE="multipart/form-data".

Puedo recibir todos mis valores de campo usando: post = $('#myForm').serialize(); ¿Pero cómo recibo la matriz $_FILES? Necesito esto para procesar el archivo cargado.

¿Es posible utilizar jQuery y, de ser así, cómo? ¿O necesito usar un complemento de carga especial para jQuery?

Respuesta

11

No puede cargar archivos a través de javascript.

Compruebe hacia fuera esta pregunta relacionada:
Is it possible to use Ajax to do file upload?

En esencia, las dos formas más populares de "falsificar" AJAX para la carga de archivos está utilizando un plug-in de Flash como SWFUpload o enviar el formulario a un iframe oculto que los procesos la solicitud.

12

forma jQuery es la mejor manera de hacerlo, puede agregar a cualquier forma normal,

<form method="post" action="URL"> 
<input type="file" name="file"> 
<input type="text" name"text"> 
<input type="submit"> 
</form> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $(form).ajaxForm(); 
}) 
</script> 

funcionará como se espera, pero con el Ajax.

http://malsup.com/jquery/form/#code-samples

0

Si usted puede controlar el medio ambiente, como, por ejemplo, que está escribiendo una aplicación de administración para una intranet en la que recomienda el navegador, entonces son posibles cargas de archivos reales AJAX con Firefox 3 y superior. En todos los demás casos, la solución alternativa de iframe o un cargador basado en Flash es el camino a seguir.

0

Es posible, pero no funciona en Google Chrome) ¡Mira!

... 
<form method='post' enctype='multipart/form-data'> 
<input type="file" id="imf" name="imf"/> 
<input type="button" id="Save"/> 
</form> 

... 

$("#Save").live("click", function(){ 

var photo = document.getElementById("imf"); 
var file = photo.files[0]; 

    $.post('/user/saveNewPhoto', {'imf':file.getAsDataURL(), fname:file.fileName }, function(data){ 
    alert (data); 
    }); 

}); 

de script de carga lateral necesita decodificar base 64) y eso es todo pero no probar esta secuencia de comandos en el archivo de tamaño grande

1

formulario contiene un archivo de entrada, pero no se encuentra method = POST y enctype = multipart/form-data en el formulario. El archivo no se enviará

1

Uso FormData

<form> 
<label for="imageToSend">Cargar imagen a la galeria</label> 
<input type="file" name="imageToSend" id="imageToSend" value="Cargar imagen" /> 
</form> 
<script> 
$('#imageToSend').on('change',function(event){ 
    var dialog = $('#dialog'); 
    var Data = new FormData(); 
    Data.append('imageToSend',$('#imageToSend')[0].files); 
    $(this).val('');//Clear input file 
    $.ajax({ 
     url: "/upload", 
     data: Data, 
     processData: false, 
     contentType: false, 
     type:'POST', 
     success: function(data){ 
      if(data.success){ 
       //success handler 
      }else if(!data.success){ 
       //error backend handler 
      } 
     }, 
     error: function(data){ 
      //error handler Ej:404 status 
     } 
    }) 
    }); 
</script>