javascript - channel Google App Engine Channel.open() 不起作用

标签 javascript python google-app-engine channel-api

我在打开 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/

相关文章:

java - 在数据存储应用程序引擎上执行 DISTINCT 查询

google-app-engine - 扩展默认应用引擎 url 时找不到 url

javascript - 尝试让 stylize() 使用 CSS 样式分别随机选择单元格 bgcolor 和文本样式

php - 在这种特殊情况下在 PHP 脚本之间传递值

python - 在 Crontab 中连续运行 python 脚本

python - 如何在 fast ai 中获得给定测试集的预测和计算准确度?

python - 如何检查缺少的属性?

javascript - Twitter 推文链接未显示

javascript - iMacros 中的嵌套循环(第二个循环)

java - 灵活环境中的 App Engine 服务?