【发布时间】:2012-07-19 00:04:46
【问题描述】:
打开频道时出现问题。 我在服务器端有这个:
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 中跟踪这些错误?比猜测错误在哪里更有效的方法。
【问题讨论】:
-
Firefox 有 Firebug,或者您可以使用 Chrome、Opera 等的内置 Javascript 调试器。大多数浏览器中还有一个显示错误的 Javascript 控制台。
-
我也这么认为,但我也没有将“打开”视为警报。所以通道似乎没有打开。我实际上是在尝试获取 /_ah/channel/connected/ 数据,但我并不真正了解它是如何工作的
-
您使用的是 Google App Engine 文档吗?
-
为了什么?对于连接/断开连接?我正在读它。我添加了这个
- url: /_ah/channel/connected/.* script: handlers_connect.app,这导致了这个类import webapp2 import logging # create logger logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) class Channel(webapp2.RequestHandler): def post(self): client_id = self.request.get('from') logger.debug("client id %s" % client_id) return app = webapp2.WSGIApplication([('/.*', Channel)], debug=True),但到目前为止还没有。
标签: javascript python google-app-engine channel-api