HTML
<form name="my_form" id="my_form" accept-charset="multipart/form-data" onsubmit="return false">
<input id="name" name="name" placeholder="Enter Name" type="text" value="">
<textarea id="detail" name="detail" placeholder="Enter Detail"></textarea>
<select name="gender" id="gender">
<option value="male" selected="selected">Male</option>
<option value="female">Female</option>
</select>
<input type="file" id="my_images" name="my_images" multiple="" accept="image/x-png,image/gif,image/jpeg"/>
</form>
JavaScript
var data = new FormData();
//Form data
var form_data = $('#my_form').serializeArray();
$.each(form_data, function (key, input) {
data.append(input.name, input.value);
});
//File data
var file_data = $('input[name="my_images"]')[0].files;
for (var i = 0; i < file_data.length; i++) {
data.append("my_images[]", file_data[i]);
}
//Custom data
data.append('key', 'value');
$.ajax({
url: "URL",
method: "post",
processData: false,
contentType: false,
data: data,
success: function (data) {
//success
},
error: function (e) {
//error
}
});
PHP
<?php
echo '<pre>';
print_r($_POST);
print_r($_FILES);
echo '</pre>';
die();
?>
Esto ya no es así. Con un y el objeto FormData(), uno puede guardar un archivo usando AJAX de manera muy simple. Ver la respuesta de Silver89 a continuación. – Rook777
@ Rook777, eso es cierto, por supuesto, si el navegador que está utilizando admite la API de archivos HTML5. ¿Has probado esto en IE qué tan simple es?Hasta que HTML5 se convierta en un estándar y sea compatible con todos los navegadores, habrá complementos porque no podrá cargar archivos con AJAX. –
Estás en lo correcto. Tengo la suerte de estar en un entorno de desarrollo que no admite IE, así que me olvidé de considerarlo. Sí, sin compatibilidad HTML5, esta característica no funcionará. Según http://caniuse.com/xhr2, solo IE 10+ admite esta función hasta el momento. – Rook777