2012-07-19 3 views
2

채널을 열 때 문제가 있습니다. 이은 (템플릿/index.html을) 나는 모든 것이 작동하는지 확인하는 경고 넣어채널 Google App Engine channel.open()이 작동하지 않습니다.

<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되는 HTML에

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)) 

과 : 난 서버 측에서이 문제를했습니다 제기 된 반면, a3은 그렇지 않습니다. 어디에 문제가 있습니까? channel.open()이 작동하지 않는 이유는 무엇입니까?

추신 : 자바 스크립트에서 이러한 오류를 추적 할 수있는 방법이 있습니까? 오류가 어디에 있는지 더 추측하는 것이 더 효과적입니다.

+0

Firefox 용 Firebug가 있거나 Chrome, Opera 등을위한 내장 자바 스크립트 디버거를 사용할 수 있습니다. 대부분의 브라우저에는 오류를 표시하는 자바 스크립트 콘솔도 있습니다. –

+0

나는 이것도 생각했다. 그러나 나는 "open"도 경고로 보지 않는다. 그래서 채널은 열리지 않는 것 같습니다. 실제로/_ah/channel/connected/data를 얻으려고하고 있지만 실제로 어떻게 작동하는지 알 수는 없습니다 – EsseTi

+0

Google App Engine 설명서를 사용하고 있습니까? 무엇에 대한 –

답변

1

디버깅에는 Firebug 또는 Chrome 디버거를 사용하십시오. 당신은 당신의 자바 스크립트에 행을 추가하여 콘솔에 메시지를 기록 할 수 있습니다 : 당신이 '토큰'얻을 값이 참으로 올바른 토큰이라고

window.console.log("Message") 

번 확인합니다.

+0

실제로 문제는 내가 주변 {{토큰}}을 놓친다는 것입니다. 그러나 이것도 onopen을위한 함수는 발생하지 않습니다. – EsseTi

+0

잘 모르겠지만 브라우저가 다른 주장 중 하나를 클릭하기를 기다리고 있기 때문에 콜백을 놓칠 수 있습니다. – dragonx

+0

경고가 제거되기 전에 경고가 제거됩니다. 페이지를 새로 고칠 때마다 채널 (토큰)이 변경된다는 것이 정상입니까? – EsseTi

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

Brilliant! 내 문제도 해결되었습니다. – xtremebytes