Javascript 我可以用localhost在SDK中测试XMLHttpRequest()吗?
以下代码似乎不起作用,因为当我尝试在Google App Engine(Python)中获取“选择器”时,它是未定义的:Javascript 我可以用localhost在SDK中测试XMLHttpRequest()吗?,javascript,python,google-app-engine,xmlhttprequest,Javascript,Python,Google App Engine,Xmlhttprequest,以下代码似乎不起作用,因为当我尝试在Google App Engine(Python)中获取“选择器”时,它是未定义的: chooser = self.request.get("chooser") self.response.out.write("chooser: %s " % chooser) #returns "chooser:" without any value 这是有效的javascript吗 var formData = new FormData(); formData.a
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呼叫或应用程序有问题吗
更新
根据Daniel Roseman的评论,我将代码包括在/choice
中,以澄清“chooser”是什么:
在/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>""")
这是上述日志的代码:
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()
所以在数据存储中,我看到“chooser”和“choice”写在两个不同的行中。我做错了什么 实际上,您提交了两次表单。一旦通过AJAX进入writeToStorage,也可以使用表单的常规方式。你必须改变两件事
writeToStorage
必须返回false
作为最后一个操作onsubmit
更改为onsubmit=“return writeToStorage()”
这样可以防止表单的默认提交,因为这将通过AJAX的writeToStorage来完成。实际上,表单提交了两次。一旦通过AJAX进入writeToStorage,也可以使用表单的常规方式。你必须改变两件事
writeToStorage
必须返回false
作为最后一个操作onsubmit
更改为onsubmit=“return writeToStorage()”
通过这种方式,您将防止默认提交表单,因为这将通过AJAX的writeToStorage来完成。只要使用此脚本的页面也由localhost:8086提供,“chooser”应该是什么?您确定
user
在javascript中有值吗?你试过用字符串文字替换它进行测试吗?@DanielRoseman;我更新了问题以澄清“chooser”@NickJohnson;为了清晰起见,我在脚本中删除了几个警报,我看到一个用户值按预期写入了localStorage。我还尝试了localStorage.getItem(“选择器”)
in/choicehandler,这将从localStorage获取用户名。只要使用此脚本的页面也由localhost:8086提供,“chooser”应该是什么?您确定user
在javascript中有值吗?你试过用字符串文字替换它进行测试吗?@DanielRoseman;我更新了问题以澄清“chooser”@NickJohnson;为了清晰起见,我在脚本中删除了几个警报,我看到一个用户值按预期写入了localStorage。我还尝试了localStorage.getItem(“选择器”)
in/choicehandler,这将从localStorage获取用户名。
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()