1
以下のコードを実行すると、フォームが複雑すぎるため、空のFormDataが表示されます。コードをどのように変更すればよいですか?FormDataオブジェクトが空の理由
フォーム、入力、ラベルなどのタグを使用してフォームを構築すると、FormDataオブジェクトが空にならないようです。たぶん私は手動で行を構築し、XMLHttpRequest経由で送信することができますが、より良い方法がありますか?
お手数ですが、よろしくお願いいたします。
HTML:
<form enctype="multipart/form-data" id="inquiry" name="inquiry" method="post" role="form"><!--action="processData.php"-->
<div class="row">
<div class="form-group">
<div class="col-md-6">
<label for="name">Your name</label>
<input type="text" class="form-control" id="name" maxlength="100">
</div>
<div class="col-md-6">
<label for="email">Your email address</label>
<input type="text" class="form-control" id="email" maxlength="100">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12">
<label for="subject">Subject</label>
<input type="text" class="form-control" id="subject" maxlength="100">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12">
<label for="message">Your message</label>
<textarea class="form-control" id="message" maxlength="5000"></textarea>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button id="post-message" type="submit">
<span>Send Message</span>
</button>
</div>
</div>
</form>
JS:あなたは、すべてのフォーム要素に名前を追加する必要があります
'use strict';
var Contact = function() {
var sendData = function() {
var xmlhttp = new XMLHttpRequest() ;
var url = "/php/processData.php";
var inquiryForm = document.forms.namedItem("inquiry");
var FD = new FormData(inquiryForm);
xmlhttp.open("POST", url , true);
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var returnData = xmlhttp.responseText ;
}
};
xmlhttp.send(FD);
for (var [key, value] of FD.entries()) {
console.log(key, value);
}
};
var windowLoadHandler = function() {
window.addEventListener("load",function(){
var inquiryForm = document.getElementById("inquiry");
inquiryForm.addEventListener("submit",function(event){
event.preventDefault();
sendData();
});
});
};
return {
init : function(){
windowLoadHandler();
}
};
}();
なぜ 'sendData'がanothe関数の中にあるのですか – brk
' namedItem'はブラウザ間ではないことに注意してください。代わりにフォームをキャッチするには、送信ハンドラで 'this'を使うべきです。上で述べたように、 'Contact'関数は決して実行されず、' sendData'関数がその内部にあります。 – adeneo
ページのロードが完了する前に 'Contact.init()'が実際に呼び出されていますか? –