FormData オブジェクト
導入
FormData はフォーム データを表し、ブラウザのネイティブ オブジェクトです。
フォーム インスタンスを構築するためのコンストラクターとして使用できます。
const formData = 新しい FormData();
上記の例では、FormData()
がコンストラクターとして使用され、空のフォーム インスタンス オブジェクトを返します。
また、フォームの DOM ノードをパラメータとして受け入れ、フォームのすべての要素とその値をキーと値のペアに変換し、返されたインスタンス オブジェクトに含めることもできます。
const formData = 新しい FormData(フォーム);
上記の例では、FormData()
のパラメータ form
がフォームの DOM ノード オブジェクトです。
以下はスクリプト経由でフォームデータを送信する使用例です。
<form id="formElem">
<input type="text" name="firstName" value="ジョン">
画像: <input type="file" name="picture" accept="image/*">
<input type="送信">
</form>
<スクリプト>
formElem.onsubmit = async (e) => {
e.preventDefault();
let response = await fetch('/article/formdata/post/user-avatar', {
メソッド: 'POST'、
本体: 新しい FormData(formElem)
});
let result = await 応答.json();
アラート(結果.メッセージ);
};
</script>
ブラウザがフォーム データをサーバーに送信するとき、ユーザーが [送信] ボタンをクリックするか、スクリプトを使用して送信するかに関係なく、データは自動的にエンコードされ、「Content-Type: multipart/form-data」の形式で送信されます。
FormData()
の 3 番目の使用法があります。フォームのキーと値のペアに「送信」ボタンを追加する場合は、ボタンの DOM ノードを FormData()
の 2 番目のパラメーターとして使用できます。 `。
新しい FormData(フォーム、送信者)
上記のコードでは、「submitter」は送信ボタンの DOM ノードです。この使用法は、複数の送信ボタンがあるフォームに適しています。サーバーは、ボタンの値を使用して、ユーザーがどのボタンを選択したかを判断する必要があります。
// フォームには 2 つの送信ボタンがあります
// <button name="intent" value="save">保存</button>
// <button name="intent" value="saveAsCopy">コピーとして保存</button>
const form = document.getElementById("フォーム");
const submitter = document.querySelector("button[value=save]");
const formData = new FormData(フォーム, 送信者);
上の例では、FormData()
が 2 番目のパラメータを追加し、インスタンス オブジェクト formData
がキー名 intent
とキー値 save
を持つキーと値のペアを追加します。
##インスタンスメソッド
追加()
append()
はキーと値のペアを追加する、つまりフォーム要素を追加するために使用されます。 2 つの使用形態があります。
FormData.append(名前, 値)
FormData.append(名前、BLOB、ファイル名)
最初のパラメータはキー名で、2 番目のパラメータはキー値です。 FormData.append(name, blob, fileName)
の上の 2 番目の形式は、ファイル セレクター <input type="file">
を追加するのと同じです。2 番目のパラメーター blob
は、ファイルのバイナリ コンテンツです。パラメータ fileName
はファイル名です。
キー名がすでに存在する場合、新しいキー値がそれに追加されます。つまり、同じキー名に対して複数のキー値が存在します。
以下に使用例を示します。
let formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');
for(let [名前, 値] of formData) {
console.log(`${名前} = ${値}`);
}
// キー1 = 値1
// キー2 = 値2
以下はバイナリファイルを追加する例です。
// HTMLコードは以下の通り
// <canvas id="canvasElem" width="100" height="80" style="border:1px Solid"></canvas>
let imageBlob = await 新しい Promise(
解決 => CanvasElem.toBlob(解決, 'image/png')
);
let formData = new FormData();
formData.append('image', imageBlob, 'image.png');
let response = await fetch('/article/formdata/post/image-form', {
メソッド: 'POST'、
本体: フォームデータ
});
let result = await 応答.json();
console.log(結果);
以下に XML ファイルを追加する例を示します。
const content = '<q id="a"><span id="b">やあ!</span></q>';
const blob = new Blob([コンテンツ], { type: "text/xml" });
formData.append('ユーザーファイル', blob);
消去()
delete()
は、指定されたキーと値のペアを削除するために使用され、そのパラメーターはキー名です。
FormData.delete(名前);
エントリ()
entries()
は、すべてのキーと値のペアを走査するための反復子を返します。
FormData.entries()
以下に使用例を示します。
const form = document.querySelector('#subscription');
const formData = 新しい FormData(フォーム);
const 値 = [...formData.entries()];
console.log(値);
以下は、「entries()」を使用してキーと値のペアを反復処理する例です。
formData.append("key1", "value1");
formData.append("key2", "value2");
for (formData.entries() の const ペア) {
console.log(`${ペア[0]}, ${ペア[1]}`);
}
// キー1、値1
// キー2、値2
得る()
get() は指定されたキー名のキー値を取得するために使用され、パラメータはキー名です。
FormData.get(名前)
キー名に複数のキー値がある場合は、最初のキー値のみが返されます。指定されたキーが見つからない場合は、「null」が返されます。
getAll()
getAll()
は指定されたキー名のすべてのキー値を取得するために使用され、そのパラメータはキー名であり、戻り値は配列です。指定されたキーが見つからない場合は、空の配列が返されます。
FormData.getAll(名前)
もっている()
has()
は、指定されたキー名が存在するかどうかを示すブール値を返し、そのパラメータはキー名です。
FormData.has(名前)
キー()
key()
は、すべてのキー名を走査するために使用されるキー名のイテレータを返します。
FormData.keys()
以下に使用例を示します。
const formData = 新しい FormData();
formData.append("key1", "value1");
formData.append("key2", "value2");
for (formData.keys() の const キー) {
コンソール.ログ(キー);
}
//キー1
//キー2
セット()
set()
は、指定されたキー名に新しいキー値を設定するために使用されます。 2 つの使用形態があります。
FormData.set(名前, 値);
FormData.set(名前、BLOB、ファイル名);
最初のパラメータはキー名で、2 番目のパラメータはキー値です。上記の 2 番目の形式はファイルをアップロードするもので、2 番目のパラメータ blob
はファイルのバイナリ コンテンツ、3 番目のパラメータ fileName
はファイル名です。このメソッドには戻り値がありません。
指定されたキーが存在しない場合はキーを追加します。存在しない場合は既存のキー値をすべて破棄し、キー名に対してキー値が 1 つだけ存在するようにします。これが append()
との主な違いです。
値()
values()
は、すべてのキー値を走査するために使用されるキー値のイテレータを返します。
FormData.values()
以下に使用例を示します。
const formData = 新しい FormData();
formData.append("key1", "value1");
formData.append("key2", "value2");
for (formData.values() の定数値) {
console.log(値);
}
// 値1
// 値2
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0