Webフォームからキー(入力名など)と値(入力値)のセットを取得しようとしています。
_<body>
<form>
<input type="text" name="banana" value="Swag">
</form>
<script>
var form = document.querySelector('form');
var formData = new FormData(form);
</script>
</body>
_
FormData documentation によれば、formData
にはフォームのキーと値が含まれている必要があります。ただし、console.log(formData)
はformData
が空であることを示しています。
FormDataを使用してフォームからデータをすばやく取得するにはどうすればよいですか?
Update: XHR仕様 には、FormDataオブジェクトを検査するためのいくつかの関数が追加されました。
FireFoxはv39.0以降の新しい機能をサポートしています 、 Chromeはv50でサポートされる予定です 。他のブラウザについてはわかりません。
var form = document.querySelector('form');
var formData = new FormData(form);
for (var [key, value] of formData.entries()) {
console.log(key, value);
}
//or
console.log(...formData)
私も同じ問題に直面しました。コンソールで見ることができませんでした。以下をajaxリクエストに追加する必要があります。これにより、データが送信されます
processData: false, contentType: false
ただし、
console.log(formData)
はformData
が空であることを示しています。
「空」とはどういう意味ですか? Chromeでこれをテストすると、‣ FormData {append: function}
...これは、FormDataオブジェクトであると言っています。私はフィドルを作成し、 これに合わせてコードを拡張しました :
var form = document.querySelector('form'),
formData = new FormData(form),
req = new XMLHttpRequest();
req.open("POST", "/echo/html/")
req.send(formData);
...これは、Chrome Developer Tools Networkパネルで見たものです:
したがって、コードは期待どおりに機能しています。
ここでの切断は、FormDataがVanilla JavaScriptオブジェクトまたは配列のように機能し、その内容を直接確認して操作できることを期待していることだと思います。残念ながら、そのようには機能しません。FormDataには そのパブリックAPI に1つのメソッドしかありません。これはappend
です。できることは、作成して値を追加し、XMLHttpRequestに渡すことだけです。
検査および操作できる方法でフォームの値を取得する場合は、入力要素を反復処理して各値を1つずつ取得するか、または他の誰かが書いた関数、例えばjQueryの。 SOスレッドにいくつかのアプローチがあるスレッド: JavaScript/jQueryでフォームデータを取得するにはどうすればよいですか?
FormData のMDNドキュメントに従って
Entries()の代わりに、FormDataを実装するオブジェクトをfor ... of構造で直接使用できます。for(var p of myFormData)は、for(var p of myFormData.entries())と同等です。
FormData.entries()を繰り返し処理してもうまくいきませんでした。
FormDataが空かどうかを確認するために私が行うことは次のとおりです。
var isFormDataEmpty= true;
for (var p of formData) {
isFormDataEmpty= false;
break;
}
FormDataを反復処理するとアップロードされたファイルが提供されるため、ファイル名、ファイルタイプの検証などを取得するために使用できます。