JS返回值然后返回“undefined”

时间:2018-05-31 19:54:55

标签: javascript node.js websocket socket.io

我从socket.io服务器获取一个值,然后将其传递给客户端以便显示。我传递的一个变量工作正常,但另一个变量首先显示一个值,然后返回为“undefined”。我不确定为什么会这样,因为这两个值都显示在客户端控制台中没有问题。

这是客户端JS的关注点:

  var socket = io();
  socket.on('broadcast',function(data) {
     document.getElementById("output").innerHTML = data.rating;
     document.getElementById("output").innerHTML = data.description;

     console.log(data);
     console.log(data.rating);
  }); 

...这里是server.js文件:

biasDetector.stdout.on('data', function(data) {
      var outputText = data.toString('utf8');
      var rating = (reliabilityResult['type']);
      console.log(outputText);
      console.log("Second check" + rating);
      io.sockets.emit('broadcast',{description: outputText}, {rating: rating});
    });

我在整个server.js中多次检查rating的值,并且它永远不会被定义为未定义,这使我相信它是一个客户端JS问题,因为我得到了另一个值{ {1}}没有问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您正尝试使用以下方式发送两个单独的对象:

io.sockets.emit('broadcast',{description: outputText}, {rating: rating});

但是,然后尝试从接收端的单个对象中读取这两个属性:

socket.on('broadcast',function(data) {
    document.getElementById("output").innerHTML = data.rating;
    document.getElementById("output").innerHTML = data.description;
}); 

更改服务器以将两个属性放在一个对象上:

io.sockets.emit('broadcast', {description: outputText, rating: rating});

所以发送方与阅读方匹配。