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.