WebSocket возвращает неопределенное в коде, но не в консоли - PullRequest
0 голосов
/ 02 октября 2018

Я изо всех сил пытаюсь понять, что здесь происходит ...

У меня есть сервер веб-сокетов на 192.168.1.64:81

Мне нужно отправить данные в сокет с веб-страницыиспользуя этот javascript:

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']);

сокет определен правильно, и программа обновления начинает правильно передавать данные через сокет !!

Чего мне не хватает?Должен ли я знать о какой-то известной проблеме?

1 Ответ

0 голосов
/ 02 октября 2018

В следующих функциях используется переменная connection, но эта переменная находится вне области видимости, поскольку connection определяется с помощью ключевого слова var (local):

connection.onopen = function() {
    connection.send('Connect ' + new Date());
};
function sendData() {
    var data="#"+joystick.deltaX()+","+joystick.deltaY();
    connection.send(data);
}};

Либо определите `connectionв качестве глобального значения:

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

В противном случае инициализируйте соединение как глобальное и назначьте нагрузку следующим образом:

    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);
};};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...