這是一個跟進my other question。我再次問,因爲這似乎更多的JavaScript問題比谷歌App Engine的問題。如何獲得textarea的價值?
我有一個表格
<form name="choice_form" id="choice_form" method="post" action="/g/choicehandler" onsubmit="writeToStorage()">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="submit" value="submit your choice">
</form>
我想借此textarea
的價值,並將其與formData
發送到應用程序。我試過這個
var choice = document.getElementById("choice_form").value;
但我得到「未定義」爲「choice」的值。我究竟做錯了什麼?
而且,如果我理解正確,則/g/choicehandler
被表單調用一次,XHR調用一次。我如何解決這個問題?下面是處理:
class Choice(webapp.RequestHandler):
def get(self):
self.response.out.write("""
<html>
<head>
<script type="text/javascript">
var count = 0;
function writeToStorage()
{
var user = "user" + count;
count++;
localStorage.setItem("chooser", user);
var choice = document.getElementById("choice_form").value;
var formData = new FormData();
formData.append("chooser", user);
formData.append("choice", choice);
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:8086/g/choicehandler", true);
xhr.onreadystatechange = function (aEvt) {
if (xhr.readyState == 4 && xhr.status == 200){
console.log("request 200-OK");
}
else {
console.log("connection error");
}
};
xhr.send(formData);
//added this per Aaron Dufour's answer
return 0;
};
</script>
</head>
<body>
//changed onsubmit like this: onsubmit="return writeToStorage(); as per Aaron Dufour's answer
<form name="choice_form" id="choice_form" action="/g/choicehandler" method="post" onsubmit="writeToStorage()">
<textarea name="choice" rows="7" cols="50"></textarea><br />
<input type="submit" value="submit your choice">
</form>
</body>
</html>""")
UPDATE
見Aaron Dufour's answer的解決方案。
謝謝。這是我第一次測試它。但第二次和第三次所有的價值都再次缺席。我究竟做錯了什麼? – Zeynel
此外,我仍然在日誌中看到xhr和表單數據。 – Zeynel
@Zeynel我不確定。你能用可能是罪魁禍首的代碼更新嗎?確保你做了一個硬刷新,所以你有新的頁面。 –