HTML 5 FormDataオブジェクトの使用
2483 ワード
FormDataオブジェクトは、XMLHttpRequestでデータを送信するために、データをキー値ペアにコンパイルするために使用されます.主にフォームデータの送信に使用されますが、フォームとは独立してキー付きデータの送信にも使用できます.
FormDataオブジェクトを自分で作成し、append()メソッドを呼び出してフィールドを追加することができます.
HTMLフォームからFormDataオブジェクトを作成する
フォームデータを含むFormDataオブジェクトを作成するには、FormDataオブジェクトの作成時にフォームの要素を指定する必要があります.
例:
また、Formフォームデータを含むFormDataオブジェクトを作成した後、リクエストを送信する前に、FormDataオブジェクトに追加のデータを追加することもできます.
進捗バーのアップロード
XMLHttpRequestの第2版では、進捗バーを作成するために使用できるprogressイベントも定義されています.
ドラッグ&ドロップアップロード
最後に、HTML 5のドラッグアンドドロップ機能を利用して、ドラッグアンドドロップアップを実現します.ドラッグ&ドロップしたファイルを受信するためのコンテナをページに配置します.
html
js
ジャンプアップロードファイルがなく、
FormDataオブジェクトを自分で作成し、append()メソッドを呼び出してフィールドを追加することができます.
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("accountnum", 123456); // 123456 "123456"
// HTML input,
formData.append("userfile", fileInputElement.files[0]);
var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);
HTMLフォームからFormDataオブジェクトを作成する
フォームデータを含むFormDataオブジェクトを作成するには、FormDataオブジェクトの作成時にフォームの要素を指定する必要があります.
例:
var formElement = document.querySelector("form");
var request = new XMLHttpRequest();
request.open("POST", "submitform.php");
request.send(new FormData(formElement));
また、Formフォームデータを含むFormDataオブジェクトを作成した後、リクエストを送信する前に、FormDataオブジェクトに追加のデータを追加することもできます.
var formElement = document.querySelector("form");
var formData = new FormData(formElement);
var request = new XMLHttpRequest();
request.open("POST", "index.php");
formData.append("Id", 10);
request.send(formData);
進捗バーのアップロード
XMLHttpRequestの第2版では、進捗バーを作成するために使用できるprogressイベントも定義されています.
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
var complete = (event.loaded / event.total * 100 | 0);
console.log(complete)
}
};
ドラッグ&ドロップアップロード
最後に、HTML 5のドラッグアンドドロップ機能を利用して、ドラッグアンドドロップアップを実現します.ドラッグ&ドロップしたファイルを受信するためのコンテナをページに配置します.
html
css
#holder {
border: 10px dashed #ccc;
width: 300px;
min-height: 300px;
margin: 20px auto;
}
#holder.hover {
border: 10px dashed #0c0;
}
js
var holder = document.getElementById('holder');
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragleave = function () { this.className = ''; return false; };
holder.ondrop = function (event) {
event.preventDefault();
this.className = '';
var files = event.dataTransfer.files;
//
};
ジャンプアップロードファイルがなく、
iframe
で実現することもできます.jQuery
にはform
プラグインがあります.