Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 频道Google应用程序引擎频道.open()不工作_Javascript_Python_Google App Engine_Channel Api - Fatal编程技术网

Javascript 频道Google应用程序引擎频道.open()不工作

Javascript 频道Google应用程序引擎频道.open()不工作,javascript,python,google-app-engine,channel-api,Javascript,Python,Google App Engine,Channel Api,我在打开频道时遇到问题。 我在服务器端安装了以下内容: 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)))

我在打开频道时遇到问题。 我在服务器端安装了以下内容:

   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)上实现的


{{token}}
警报(“a0”);
var-token={{token}};
警报(“a1”);
var通道=新的goog.appengine.channel(令牌);
警报(“a2”);
var socket=channel.open();
警报(“a3”);
socket.onopen=函数(){
警报(“开放”);
};
socket.onmessage=函数(m){
var data=$.parseJSON(m.data);
警报(数据)
};
socket.onerror=函数(err){
警报(“错误=>”+错误说明);
};
socket.onclose=函数(){
警报(“频道关闭”);
};
我发出警报,看看是否一切正常,但a0 a1 a2升高,而a3不升高。 问题在哪里? 为什么channel.open()不起作用


PS:有没有办法在javascript中跟踪这些错误?比猜测错误的位置更有效的方法。

要进行调试,请使用Firebug或Chrome调试器。您可以通过在Javascript中添加行将消息记录到控制台:

window.console.log("Message")

仔细检查“token”的值是否确实正确。

要进行调试,请使用Firebug或Chrome调试器。您可以通过在Javascript中添加行将消息记录到控制台:

window.console.log("Message")

仔细检查“token”的值是否确实正确。

我也遇到了同样的问题。它在本地主机上运行得很好,但在我上传后就不起作用了。似乎令牌的格式并不总是正确,您需要对其进行修剪

因此,以下警报为“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);
});

然而,它工作完美,打开了通道

我也有同样的问题。它在本地主机上运行得很好,但在我上传后就不起作用了。似乎令牌的格式并不总是正确,您需要对其进行修剪

因此,以下警报为“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);
});


然而,它工作完美,打开了通道

Firefox上有Firebug,或者你可以使用内置的Javascript调试器来调试Chrome、Opera等浏览器。大多数浏览器中都有一个Javascript控制台,显示错误。我也这么认为,但我没有看到“打开”和警报。因此,该频道似乎没有开放。实际上,我正在尝试获取/_ah/channel/connected/data,但我不知道它是如何工作的。你在使用谷歌应用程序引擎文档吗?为什么?对于已连接/已断开的?我现在正在读。我添加了这个
-url:/\u ah/channel/connected/*脚本:handlers\u connect.app
,它导致了这个类
导入webapp2导入日志记录#创建日志记录器logger=logging.getLogger(uu name_uu)logger.setLevel(logging.DEBUG)类通道(webapp2.RequestHandler):def post(self):client\u id=self.request.get('from'))logger.debug(“客户端id%s”%client_id)return app=webapp2.WSGIApplication([('/.*',Channel)],debug=True)
但目前为止还没有任何结果。Firefox存在Firebug,或者您可以使用内置的Javascript调试器对Chrome、Opera、,大多数浏览器中都有一个Javascript控制台显示错误。我也这么认为,但我看不到“打开”也有警报。因此,该频道似乎没有开放。实际上,我正在尝试获取/_ah/channel/connected/data,但我不知道它是如何工作的。你在使用谷歌应用程序引擎文档吗?为什么?对于已连接/已断开的?我现在正在读。我添加了这个
-url:/\u ah/channel/connected/*脚本:handlers\u connect.app
,它导致了这个类
导入webapp2导入日志记录#创建日志记录器logger=logging.getLogger(uu name_uu)logger.setLevel(logging.DEBUG)类通道(webapp2.RequestHandler):def post(self):client\u id=self.request.get('from'))logger.debug(“客户端id%s”%client_id)return app=webapp2.WSGIApplication([('/.*,Channel)],debug=True)
但到目前为止什么都没有。实际上问题是我错过了{{token}}周围的“”,但即使这样,onopen的函数也不会被调用。对此我不确定,但可能会错过回调,因为浏览器正在等待您单击其他断言之一。甚至在未引发onOpened中的警报之前删除警报。每次我刷新页面时都会更改频道(令牌)是正常的吗?我会说“不,这不正常”,比如,你不应该这样做。但是,是的,这在您的示例中是应该的,因为在get()处理程序中,您会在每个请求上创建一个新的令牌。另外,请验证channel.open()是否返回了一个有效的套接字对象,这可能解释了为什么没有调用onopen()。实际上,问题是我错过了{{token}周围的“”但即使这样,onopen的函数也不会引发。我不确定这一点,但可能会错过回调,因为浏览器正在等待您单击其他断言之一。甚至在onopen中的警报未引发之前删除警报。每次我刷新页面时都会更改频道(令牌)是正常的吗?我会说“不,这不正常”,比如,你不应该这样做。但是,是的,这在您的情况下是应该的,因为在get()处理程序中,您会在每个请求上创建一个新的令牌。另外,请验证channel.open()是否返回了一个有效的套接字对象,这可能解释了为什么没有调用onopen()。太棒了!也解决了我的问题。太棒了!也解决了我的问题。