无法在本地计算机上使用GAE通道API
我正在创建一个小应用程序,想测试一下GAE Channel API是怎么工作的。我觉得我按照文档上的说明做了所有步骤,但当我启动应用时,Firefox的错误日志里显示了一个关于语法的错误,接着又出现了一个重复的错误,提示找不到某个元素。
这是第一个错误的信息:
Source: http://127.0.0.1:8080/_ah/channel/dev?command=connect&channel=channel-773698929-185804764220139124118
Line 1, symbol 1
这是我的JavaScript代码尝试连接的URL,它不断重试,因此出现了第二个错误:
http://127.0.0.1:8080/_ah/channel/dev?command=poll&channel=channel-2071442473-185804764220139124118&client=1
我通过jQuery的$.get
发起一个JSON请求来获取令牌。然后我运行这段代码来获取令牌并打开通道。错误在我运行socket = channel.open(handler)
时开始出现:
var response = JSON.parse(data);
var token = response.token.toString();
channel = new goog.appengine.Channel(token);
var handler = {
'onopen': onOpened,
'onmessage': onMessage,
'onerror': function() {
},
'onclose': function() {
}
};
socket = channel.open(handler);
这是用Python编写的服务器端代码,用来打开通道:
class OpenChannel(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
token = channel.create_channel(user.user_id())
serialized = json.dumps({'token': token})
self.response.headers['Content-Type'] = "application/json"
self.response.out.write(serialized)
我的错误是什么,我该怎么办呢?谢谢!
2 个回答
0
你可以试着去掉处理程序的参数,然后把处理程序作为socket对象的方法来添加,比如说 socket.onopen = function() {};
这样做。我这样做是有效的。不过你说得对。根据这个链接,你应该可以通过使用处理程序参数来让它正常工作。嗯。
1
看起来Channel API在本地和在GAE(谷歌应用引擎)上运行的方式不太一样。我把它上传到云端,现在运行得很好。虽然在本地电脑上看起来也没问题,但错误日志里却一直显示一个永久性的JavaScript错误。