Comunidad de diseño web y desarrollo en internet online

Pasar un input file a PHP mediante $.ajax

Citar            
MensajeEscrito el 06 Ene 2013 07:59 pm
Veamos mi problema es el siguiente;

Tengo un formulario donde tengo diversos campos incluido un input type="file". Cuando quiero enviar el formulario primero se valida mediante jQuery validate(), después lo serializo con JQuery serialize() y se envian los datos a un archivo PHP con JQuery $.ajax.

Todo funciona perfectamente salvo por el input file. serialize() no lo reconoce, por lo que he podido leer no lo hace porque AJAX no puede subir ficheros... bien... pero entonces mi problema es que no tengo ni idea de como hacer que el archivo que subo llegue al PHP para poder subirlo y almacenarlo en la DB.

Para el input file es simplemente un archivo pdf que si posee dicha extensión carga una imagen a modo de archivo correcto y nada más. Esto funciona correctamente.

Código Javascript :

function handleFileSelectPdf(evt) {
    var files = evt.target.files;
    for (var i = 0, f; f = files[i]; i++) {
    
    if(!f.name.match('\.pdf')){ continue; }

     var reader = new FileReader();
     
     reader.onload = (function(theFile) {
        return function(e) {
          document.getElementById('list').innerHTML="";
        var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="css/validopdf.jpg" title="', escape(theFile.name), '"/><span>', escape(theFile.name), '</span>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);
      reader.readAsDataURL(f);
   }
  }
  document.getElementById('documentacion').addEventListener('change', handleFileSelectPdf, false);


Posteriomente tengo la validación la cual funciona correctamente. la serialización y el $.ajax.

Código Javascript :

$('#formProyectoPersonal').validate({
      
      rules:{
         // Esta parte va bien la he quitado para aligerar
      },
      
      submitHandler:function(){
         
         var cadena= $('#form').serialize();
         alert(cadena); //simple prueba se quitará posteriormente.
         
          
         $.ajax({
            
            beforeSend: function(){
            },
            
            cache:false,
            type: "POST",
            dataType: "json",
            url:"php/upload.php",
            data:cadena +"&idr=" + Math.random(),
         success: function(response){

         },
         error:function(){
         alert('Error general');
         }
         
         });
         return false;
      },
      
      errorPlacement: function(error, element){
         error.appendTo(element.prev("span").append());
      }
   }); 


Aquí es donde está mi problema. Envío mediante POST los datos al archivo PHP los cuales los recibo mediante $_POST y los recibo bien, menos los del input file que no llegan a $_FILES, ya que no los serializa...

¿Como puedo añadir a data:cadena la información del input type="file"?

Gracias a todos.

Por curioso

8 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Ene 2013 03:51 am
Con este plugin, puedes enviar cualquier formulario por ajax incluyendo archivos, solo lo llamas como a cualquier otro plugin y el hace todo por ti, además tiene métodos para validar y resetear los input una vez enviados y muchas otra opciones, recomendado.

Por HtrMancera

Claber

342 de clabLevel

1 tutorial

Genero:Masculino  

Front-end Developer

chrome
Citar            
MensajeEscrito el 07 Ene 2013 06:17 pm

HtrMancera escribió:

Con este plugin, puedes enviar cualquier formulario por ajax incluyendo archivos, solo lo llamas como a cualquier otro plugin y el hace todo por ti, además tiene métodos para validar y resetear los input una vez enviados y muchas otra opciones, recomendado.


Muchas gracias, me ha sido de gran ayuda. :D

Por curioso

8 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.