我想创建一个应用程序,其中page3用户通过sockjs websocket开始通信(他们通过page1和page2到达第3页)。代码工作正常,但我不知道为什么!
// Global scope
var sock;
// Inside a function page3, this is invoked when Page3 loads for the first time
function page3(){
// Local scope
sock= new SockJS("localhost:8080/messages);
sock.onopen= function(){
....
};
sock.onmessage= function(data){
....
};
}
我的问题是 - 当从服务器发送消息时,程序执行如何sock.onmessage
访问该消息,即使它已被查看'只有在第一次加载Page3时才会调用function page3()
?
答案 0 :(得分:0)
看起来sock
未导入(错误消息表明它未定义)
也许如果您可以分享更多代码,我们可以看到原因
答案 1 :(得分:0)
找到我自己的答案。
问题实际上与客户端上事件侦听器的可见性有关。答案就是 - 客户端上的所有事件监听器一旦被激活(程序执行流程已“看到”它们)保持活动状态,直到它们被删除。
所以在上面的例子中,即使程序执行只看到function page3()
一次 - 当第一次加载Page3时,sock.onmessage
在page3()
期间被激活为(客户端)事件监听器。 1}}函数调用并继续保持活动状态,直到套接字关闭。
因此,不需要显式page3()
函数调用来触发sock.onmessage
。它(sock.onmessage
)将继续监听服务器发送的套接字事件。