2012-07-19 48 views
2

打開頻道時出現問題。 我這個服務器端:頻道Google App Engine channel.open()不起作用

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(模板/ 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中跟蹤這些錯誤?然後猜測錯誤在哪裏更有效。

+0

還有Firebug for Firefox,或者您可以使用Chrome,Opera等內置的Javascript調試器。在大多數瀏覽器中還有一個顯示錯誤的Javascript控制檯。 – 2012-07-19 18:38:26

+0

我也這麼認爲,但我並沒有看到「開放」作爲警覺。所以渠道似乎不會被打開。 我實際上試圖獲取/ _ah/channel/connected/data,但我真的不知道它是如何工作的 – EsseTi 2012-07-19 18:41:23

+0

您是否在使用Google App Engine文檔? – 2012-07-19 18:42:13

回答

1

調試時使用Firebug或Chrome調試器。您可以通過添加行到你的Javascript消息記錄到控制檯:

window.console.log("Message") 

仔細檢查你爲「令牌」的值確實是正確的標記。

+0

實際上問題在於我錯過了{{token}}周圍的'',但即使如此,onopen的函數也不會引發。 – EsseTi 2012-07-19 19:42:48

+0

我對此一無所知,但回調可能會因爲瀏覽器正在等待您單擊某個其他聲明而錯過。 – dragonx 2012-07-19 19:48:07

+0

甚至在onOpened內部沒有引發之前刪除警報。 每次刷新頁面時,頻道(標記)是否被更改是正常的? – EsseTi 2012-07-19 19:51:05

3

我有這個相同的問題。它在本地主機上運行良好,但是一旦我上傳它就無法工作。看起來這些令牌並不總是開始正確格式化,而需要修剪它們。

因此,下面的提示爲 「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); 
}); 

然而,它完美的作品,並打開通道!

+0

輝煌!更正了我的問題。 – xtremebytes 2014-05-16 01:15:03

相關問題