JSON .parse (e.data) - onmessage websocket - ReferenceError: e не определено / 'data' не определено / WebSocket уже находится в состоянии CLOSING или CLOSED - PullRequest
0 голосов
/ 15 февраля 2020

websocket / JSON newb ie здесь. У меня проблема с получением данных из функционального события. Может ли кто-нибудь мне помочь?

Похоже, сообщение отправлено на сервер правильно (правильное значение message_cart при использовании функции sendMessage ()), но возникает при получении данных.

Моя консоль :

websocket.min. js: 35 Uncaught TypeError: Невозможно прочитать свойство 'data' undefined в receiveMessage (websocket.min. js: 35)

сообщение из корзины на сервер: 10 // номер правильный

websocket.min. js: 83 WebSocket уже находится в состоянии ЗАКРЫТО или ЗАКРЫТО.

Моя паутина. js:

document.addEventListener('DOMContentLoaded', function(){
  'use strict';

  var ws_protocol = 'ws://';
  if (window.location.protocol == "https:")
    ws_protocol = 'wss://';
  var ws_url = ws_protocol + window.location.host + '/ws/auctions/' + qs;
  var webSocket = new WebSocket(ws_url);

  var amountbutton = document.getElementsByClassName('amountButton');
  var message_cart;

  webSocket.onopen = sendMessage();
  webSocket.onmessage = receiveMessage();

  function receiveMessage(e) {
    var msgData = JSON.parse(e.data);
    if ('auction_data' in msgData) {
        console.log("here we are, 'auction_data' in msgData");
    } else if ('cart_data' in msgData) {
        console.log("here we are, 'cart_data' in msgData");
    }
  };

  function sendMessage() {

    for(let i = 0; i < amountbutton.length; i++) {

      amountbutton[i].onclick = (e) => {
        if(!amountbutton[i].nextElementSibling) {
          message_cart = amountbutton[i].previousElementSibling.value;
          message_cart++;
        } else {
          message_cart = amountbutton[i].nextElementSibling.value;
          message_cart--;
        }
        console.log("message from cart to server: " + message_cart);
        webSocket.send(message_cart);
      }
    }
  }

  webSocket.onclose = function(e) {
    console.error('Websocket closed.');
  };

}, false);

1 Ответ

0 голосов
/ 15 февраля 2020

Чтобы веб-сокет вызывал ваши обратные вызовы onopen и onmessage, вы должны назначить их слушателям как функция , а не как значения эти функции возвращаются. Поэтому решение состоит в том, чтобы просто назначить эти функции без их вызова, например:

  webSocket.onopen = sendMessage; // <- no curly braces in there
  webSocket.onmessage = receiveMessage; // <- no curly braces in there

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...