Это продолжение до моего другого вопроса .Я спрашиваю снова, потому что это кажется больше вопросом javascript, чем вопросом Google App Engine.
У меня есть форма
<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;
, но я получил "undefined" для значения "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>""")
ОБНОВЛЕНИЕ
См. Ответ Аарона Дюфура для решения.