Websocket/JSON débutant ici. J'ai un problème avec la réception des données de l'événement de fonction. Quelqu'un pourrait-il m'aider?

On dirait que le message est envoyé correctement au serveur (valeur message_cart correcte lors de l'utilisation de la fonction sendMessage()), mais pose problème lors de la réception des données.

Ma console :

websocket.min.js:35 Uncaught TypeError: Impossible de lire la propriété 'data' de non définie à receiveMessage (websocket.min.js:35)

message du panier au serveur : 10 // le numéro est correct

websocket.min.js:83 WebSocket est déjà à l'état FERMETURE ou FERMETURE.

Mon 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);
0
idrm 15 févr. 2020 à 13:38

1 réponse

Meilleure réponse

Pour que Web Socket appelle vos rappels onopen et onmessage, vous devez les attribuer aux auditeurs en tant que fonction, et non en tant que valeurs ces fonctions renvoient. La solution est donc d'affecter simplement ces fonctions sans les appeler, comme ça :

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

J'espère que cela aide :)

0
Max 15 févr. 2020 à 10:48