Google App Engine では、javascript (または Ajax) を使用してフォームを POST し、ターゲット div を更新したいと考えています。フォームには、転送するフィールドとファイルが多数含まれています。JavaScript 関数は、「Javascript: The Definite Guide」ブックからコピーされます。2 つの質問があります。
- 「form.html」で、postFormData() 関数の「データ」引数を準備して、すべてのフィールドとファイルを渡すにはどうすればよいですか。
- 応答 (つまり、「form.html」) がコンテンツ div を更新できるように、コールバック関数を設計する方法は?
ご協力いただきありがとうございます。
base.html:
...
<div id="content">
{% include "form.html" %}
</div>
Image:<br />
<img src="/file?entity_id={{entity.key}}" />
<br />
<script type="text/javascript">
function postFormData(url, data, callback) {
if (typeof FormData === "undefined")
throw new Error("FormData is not implemented");
var request = new XMLHttpRequest();
request.open("POST", url);
request.onreadystatechange = function() {
if (request.readystate === 4 && callback)
callback(request);
};
var formdata = new FormData();
for (var name in data) {
if (!data.hasOwnProperty(name)) continue;
var value = data[name];
if (typeof value === "function") continue;
formdata.append(name, value);
}
request.send(formdata);
}
</script>
...
form.html
<form action="/form" method="POST" enctype="multipart/form-data">
name1: <input type="text" name="name" />{{ name1 }}<br /><br />
name2: <input type="text" name="name" />{{ name }}<br /><br />
...
file1: <input type="file" name="file" />{{ file1 }}<br /><br />
file2: <input type="file" name="file" />{{ file2 }}<br /><br />
...
<input type="submit" value="Submit" onclick="return postFormData('/form', howToPrepareData?, whatIsTheCallbackFunction?)" />
</form>