Javascript WebSocket在代码中返回未定义,但在控制台中不返回
我正在努力理解这里发生了什么 我在192.168.1.64:81上有一个websocket服务器 我需要使用以下javascript从网页向套接字发送数据:Javascript WebSocket在代码中返回未定义,但在控制台中不返回,javascript,websocket,Javascript,Websocket,我正在努力理解这里发生了什么 我在192.168.1.64:81上有一个websocket服务器 我需要使用以下javascript从网页向套接字发送数据: window.onload = function() { var connection = new WebSocket("ws://"+location.hostname+":81", ['arduino']); connection.onopen = function() { connection.send
window.onload = function() {
var connection = new WebSocket("ws://"+location.hostname+":81", ['arduino']);
connection.onopen = function() {
connection.send('Connect ' + new Date());
};
connection.onerror = function(error) {
console.log('WebSocket Error ', error);
};
connection.onmessage = function(e) {
console.log('Server: ', e.data);
};
function sendData() {
var data="#"+joystick.deltaX()+","+joystick.deltaY();
connection.send(data);
}};
现在是这样的:如果我打开js控制台(在firefox中),我会看到“连接未定义”错误。。。但如果我将粘贴复制到控制台,则行:
var connection = new WebSocket("ws://"+location.hostname+":81", ['arduino']);
套接字被正确定义,更新程序开始通过套接字正确地流式传输数据
我错过了什么?
我应该知道一些众所周知的问题吗?以下函数使用了
连接变量,但该变量超出了范围,因为连接
是使用var
(本地)关键字定义的:
将`连接定义为全局值:
connection = new WebSocket("ws://"+location.hostname+":81", ['arduino']);
或使用内部绑定/引用:
connection.onopen = function(e) {
e.target.send('Connect ' + new Date());
};
sendData = function() {
var data="#"+joystick.deltaX()+","+joystick.deltaY();
this.send(data);
}.bind(connection);
否则,将连接初始化为全局连接并按如下方式分配onload:
var connection;
window.onload = function() {
connection = new WebSocket("ws://"+location.hostname+":81", ['arduino']);
connection.onopen = function() {
connection.send('Connect ' + new Date());
};
connection.onerror = function(error) {
console.log('WebSocket Error ', error);
};
connection.onmessage = function(e) {
console.log('Server: ', e.data);
};};
我以前尝试过第一个选项,但看起来服务器不喜欢同时加载html和在端口81上接收数据。我现在试图定义“var连接;”作为一个全局变量,然后定义.onload何时完成!现在就开始测试!如果您的服务器不允许并发连接,这将是一个更大的问题,因为WebSockets连接将阻塞设备。考虑为ARDUINO使用一个Evserver服务器库。也许会在嵌入式设备上工作(我有偏见),或者(如果在服务器上使用JavaScript)考虑No.js.OnPoad技巧对我来说很好,但我想你所说的是正确的。这只是一个放错位置的变量init,.onload的想法很好!谢谢
var connection;
window.onload = function() {
connection = new WebSocket("ws://"+location.hostname+":81", ['arduino']);
connection.onopen = function() {
connection.send('Connect ' + new Date());
};
connection.onerror = function(error) {
console.log('WebSocket Error ', error);
};
connection.onmessage = function(e) {
console.log('Server: ', e.data);
};};