下面的代碼似乎沒有工作,因爲當我試圖讓「選配」在谷歌的App Engine(Python)的是未定義:我可以使用本地主機在SDK中測試XMLHttpRequest()嗎?
chooser = self.request.get("chooser")
self.response.out.write("chooser: %s " % chooser)
#returns "chooser:" without any value
這是有效的JavaScript?
var formData = new FormData();
formData.append("chooser", user);
var xhr = new XMLHttpRequest();
//is it ok to test this with localhost?
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);
問題是XHR調用還是與應用程序?
UPDATE
我包括在/choice
代碼來澄清「選配」是按照丹尼爾·羅斯曼的評論:
在/choice
處理我有writeToStorage()
其形式分配的用戶名user1, user2
和等等,並寫到localStorage
。
在將用戶名寫入localStorage
之後,我還需要將它寫入應用程序中的數據庫,然後使用xhr
將其發送到/g/choicehandler
處理程序。
所以, 「選擇器」,我相信這是一個字符串,由
var user = "user" + count;
我複製/choice
處理程序如下:
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 formData = new FormData();
formData.append("chooser", user);
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);
};
</script>
</head>
<body>
<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>""")
更新2
我的發現記錄從xhr發送的「選擇」和「選擇器」的textarea文本不會一起顯示,其中一個始終沒有值:
INFO ... chooser: user0 choice:
INFO ... chooser: choice: abcd
INFO ... chooser: user0 choice:
INFO ... chooser: choice: efgh
這是上述日誌的代碼:
chooser = self.request.get("chooser")
choice = self.request.get("choice")
logging.info("chooser: %s choice: %s" % tuple([chooser, choice]))
new_choice = User(
choice = choice,
owner = chooser)
new_choice.put()
所以在數據存儲區我看「選擇器」和「選擇」寫在2個不同的行。我究竟做錯了什麼?
只要使用這個腳本的頁面也從localhost提供就可以了:8086 –
'選擇器'應該是什麼? –
你確定'user'在你的javascript中有一個值嗎?你有沒有嘗試用字符串文字替換它進行測試? –