我正在尝试以user1,user2,user3等形式向每个新用户发出用户名。
作为my previous question的结果,现在我明白我需要在应用中跟踪计数,而不是在浏览器中。所以我创建了/counthandler
(我正在使用Google App Engine Python):
class CountHandler(webapp.RequestHandler):
def get(self):
count = count + 1
在/choice
中,我有这个脚本:
function writeToStorage()
{
var user = "user" + count;
localStorage.setItem("chooser", user);
document.getElementById("form_chooser").value = user;
};
如何从/counthandler
到writeToStorage
获得“统计”?我知道我需要使用HMLHttpRequest,但不知道如何使用。感谢。
更新
在回应jfriend00的评论时,我添加了更多关于ajax调用的具体问题:
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:8086/counthandler", true);
xhr.onreadystatechange = function (aEvt) {
if (xhr.readyState == 4 && xhr.status == 200){
console.log("request 200-OK");
}
else {
console.log("connection error");
}
};
//I am not sure what to put in send()?
xhr.send();
更新2
为了回应jfriend00的评论和提供的参考,我将呼叫改为GET;但不确定在此之后会发生什么:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:8086/counthandler", true);
xhr.onreadystatechange = function (aEvt) {
if (xhr.readyState == 4 && xhr.status == 200){
console.log("request 200-OK");
}
else {
console.log("connection error");
}
};
//changed this to "null". this now opens the connection.
//what do I do after this?
xhr.send(null);
更新回答jfriend00的更新回答:
感谢您的详细解释。现在我明白了。但是我仍然缺少一些东西。很容易得到count的值:
query = Count.all()
query.get()
count = e.count
logging.info("count = %s" % count)
# gives count = 12
现在你要说的是,将带有
的js变量“count”的python变量“count”的值赋值为12<script type="text/javascript">
var count = 12;
</script>
我不明白下次当计数= 13时会发生什么?
在我看来
<script type="text/javascript">
var count = count;
</script>
不起作用。正确?我错过了什么?
再次感谢。
更新以尝试jfriend00的答案中的第二个选项。似乎我需要包含一个成功函数来获取/counthandler
发送的“计数”变量:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
//get "count" sent by /counthandler?
//var count = count;
}
};
xhr.open("POST", "http://localhost:8086/counthandler", true);
xhr.send(null);
但我仍然不明白/counthandler
如何发送“计数”以及如何在成功函数中获取它。
答案 0 :(得分:1)
如果要跟踪变量服务器端并且想要将其放在网页中,那么只需将javascript变量输出到网页,其值为count。因此,如果您的服务器的计数为12,那么您只需从Web服务器应用程序将其输出到网页:
var count = 12;
然后,任何客户端javascript代码都可以访问该count变量的值。如果要从客户端网页修改计数变量,则必须发出服务器请求,以便在服务器上进行修改(Post或Get),通常使用表单发布或ajax调用。< / p>
有两种方法可以解决这个问题:
您已经说过在服务器上拥有count值。它存储在你的服务器上。它不在/ counthandler或/ choice中 - 这些只是在您的服务器上运行的脚本。所以,如果你想要/ choice网页中的计数值,那么你去修改/ choice python脚本并获得该脚本中count的值,然后将其插入到网页中,就像放入其他任何内容一样在python脚本的网页中(具体如何取决于你正在使用的python环境),但如果你已经从python脚本创建网页,你必须已经这样做了。然后,在该网页的适当位置,您放置了这段javascript:
<script type="text/javascript">
var count = 12;
</script>
您没有从/ counthandler获取值并将其放入/ count从服务器。在/ count脚本中,您获取count的值并将其放入该网页。
在/ choice网页中,您向某个服务器页面(可能是/ counthandler)发出ajax请求以获取当前计数。来自该ajax调用的成功处理程序将具有所需的计数值,然后您可以在网页中随意使用它。
至于将其写入localstorage,我们仍然不知道为什么你晚上尝试这样做,因为你似乎已经将它存储在服务器上了。 localstorage是特定于浏览器的存储,只能在该特定浏览器中使用,并且可以由用户随时清除。
答案 1 :(得分:1)
我必须说,你完全以错误的方式解决这个问题,从而使自己的事情变得比他们需要的更难。
存储用户名等内容的正确位置不在Javascript本地存储中,而是在cookie中。不需要AJAX,只需要服务器端代码。
你没有说你正在使用什么服务器端框架,但假设它是Django,你只需response.set_cookie('username', username)
- 虽然如果你使用Django,我无法想象为什么你不会使用内置的身份验证框架。