Estoy usando FormData y Ajax para pasar un archivo para cargar desde la vista al controlador en Codeigniter. La transferencia del archivo cargado se debe realizar mediante Ajax. A continuación se muestra el código que estoy usando. Si no incluyo la línea form.append("photoToUpload", fileToUpload.files[0]); , el paso de datos. Pero no funciona si form.append("photoToUpload", fileToUpload.files[0]); está incluido. El error que se muestra es "Índice no definido: photoToUpload".
Usando la línea console.log(fileToUpload.files[0]); en realidad muestra los detalles de la imagen que estoy tratando de cargar. Y usé for (var pair of form.entries()) { console.log(pair[0]+ ', ' + pair[1]); } para confirmar el contenido de FormData antes de llamar a Ajax para asegurarse de que tiene el contenido correcto.
Información adicional: el código funciona en localhost pero no en el servidor en vivo. El servidor tiene una versión de PHP un poco más alta pero aún 7.2, tiene la misma versión de Jquery. No estoy seguro de qué más comprobar.
var fileToUpload = document.getElementById('photoToUpload'); // To check if fileToUpload has the contents console.log(fileToUpload.files[0]); var form = new FormData(); form.append("photoToUpload", fileToUpload.files[0]); form.append("caption", "Sample caption"); // To check if the FormData has the contents for (var pair of form.entries()) { console.log(pair[0]+ ', ' + pair[1]); } $.ajax({ url : "addToDB", type : "POST", data : form, cache : false, contentType : false, processData : false, success : function(response) { console.log(response); } });back-end:
echo $_POST['caption']; echo $_FILE['photoToUpload']['name']; // This also work in displaying the data passed in array format print_r($_POST); // Displays photoToUpload as undefined print_r($_FILES); // Empty array for photoToUpload