jQuery Ajaxはマルチパートフォームを送信します
Javascript
FormData`と
$ .ajax() `を使用してマルチパートフォームを提出する方法を示す簡単なjQuery Ajaxの例
1. HTML
複数のファイルアップロード用のHTMLフォームと余分なフィールド。
<!DOCTYPE html>
<html>
<body>
<h1>jQuery Ajax submit Multipart form</h1>
<form method="POST" enctype="multipart/form-data" id="fileUploadForm">
<input type="text" name="extraField"/><br/><br/>
<input type="file" name="files"/><br/><br/>
<input type="file" name="files"/><br/><br/>
<input type="submit" value="Submit" id="btnSubmit"/>
</form>
<h1>Ajax Post Result</h1>
<span id="result"></span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</body>
</html>
2. jQuery.ajax
2.1フォームからJavascriptの `FormData`オブジェクトを作成します。
var form = $('#fileUploadForm')[0];
var data = new FormData(form);
2.1
processData:false
、データをクエリー文字列に変換するjQueryフォームを防止する
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
processData: false, //Important!
contentType: false,
cache: false,
2.3完全な例。
$(document).ready(function () {
$("#btnSubmit").click(function (event) {
//stop submit the form, we will post it manually.
event.preventDefault();
//Get form
var form = $('#fileUploadForm')[0];
//Create an FormData object
var data = new FormData(form);
//If you want to add an extra field for the FormData
data.append("CustomField", "This is some extra data, testing");
//disabled the submit button
$("#btnSubmit").prop("disabled", true);
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "/api/upload/multi",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 600000,
success: function (data) {
$("#result").text(data);
console.log("SUCCESS : ", data);
$("#btnSubmit").prop("disabled", false);
},
error: function (e) {
$("#result").text(e.responseText);
console.log("ERROR : ", e);
$("#btnSubmit").prop("disabled", false);
}
});
});
});
参考文献
-
https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using
FormData
Objects[MDN
ブートファイルのアップロード例 – AjaxとREST]