我在打开 channel 时遇到问题。 我在服务器端有这个:
def get(self):
user = users.get_current_user()
if not user:
self.redirect(users.create_login_url(self.request.uri))
return
channel_id=str(str(random.randint(0,1000)))
token = channel.create_channel(channel_id)
template_values = {
'token': token,
'me': user.user_id()
}
logger.debug("Token: %s user:%s %s %s" % (token,user.user_id(),user.nickname(),user.email()))
self.response.out.write(template.render('templates/index.html', template_values))
这在 HTML (templates/index.html) 上
<html>
<head>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
</head>
<body>
{{ token }}
<script>alert("a0");
var token = {{ token }};
alert("a1");
var channel = new goog.appengine.Channel(token);
alert("a2");
var socket = channel.open();
alert("a3");
socket.onopen = function(){
alert("open");
};
socket.onmessage = function(m){
var data = $.parseJSON(m.data);
alert(data)
};
socket.onerror = function(err){
alert("Error => "+err.description);
};
socket.onclose = function(){
alert("channel closed");
};
</script>
</body>
</html>
我发出警报,看看是否一切正常,但 a0 a1 a2 被引发,而 a3 没有。 哪里有问题? 为什么channel.open()不起作用?
PS:有什么方法可以在 javascript 中跟踪这些错误吗?比猜测错误在哪里更有效的方法。
最佳答案
我也遇到了同样的问题。它在本地主机上运行良好,但上传后就无法工作。 token 的开始格式似乎并不总是正确,您需要 trim 它们。
因此以下警报带有“1”,但随后崩溃:
if(user != null)
{
$.get("tutorial",{channelKey:userId} ,function(data) {alert(data); token = data;
alert(userId);
channel = new goog.appengine.Channel(data);
alert(1);
socket = channel.open();
alert(2);
socket.onopen = onOpened;
alert(3);
socket.onmessage = onMessage;
alert(4);
socket.onerror = onError;
alert(5);
socket.onclose = onClose;
alert(6);
});
如果您将其更改为:
if(user != null)
{
$.get("tutorial",{channelKey:userId} ,function(data) {alert(data); token = data;
alert(userId);
channel = new goog.appengine.Channel(data.trim());
alert(1);
socket = channel.open();
alert(2);
socket.onopen = onOpened;
alert(3);
socket.onmessage = onMessage;
alert(4);
socket.onerror = onError;
alert(5);
socket.onclose = onClose;
alert(6);
});
但是,它运行良好并打开了 channel !
关于javascript - channel Google App Engine Channel.open() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11567035/