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();
?>
To nie jest już prawdą. Dzięki i obiektowi FormData() można bardzo łatwo zapisać plik za pomocą AJAX. Zobacz odpowiedź Silver89 poniżej. – Rook777
@ Rook777, to prawda, jeśli używana przeglądarka obsługuje interfejs API pliku HTML5. Czy próbowałeś tego w IE, jakie to proste?Dopóki HTML5 nie stanie się standardem i będzie obsługiwany przez wszystkie przeglądarki, będą dostępne wtyczki, ponieważ nie można przesyłać plików za pomocą AJAX. –
Masz rację. Mam szczęście być w środowisku programistycznym, które nie obsługuje IE, więc zapomniałem o tym pomyśleć. Tak, bez zgodności z HTML5 ta funkcja nie będzie działać. Według http://caniuse.com/xhr2, tylko IE 10+ obsługuje tę funkcję do tej pory. – Rook777