【问题标题】:Can not read property 0 of undefined无法读取未定义的属性 0
【发布时间】:2018-10-03 06:54:42
【问题描述】:

我收到未捕获的类型错误:“无法读取未定义的属性 '0'”错误。我就是想不通这个问题。

虽然程序运行良好并且我得到了所需的输出。但是错误...

Console screenshot Console screeshot / resp object

$(window).bind("load", function() {

var ws = new WebSocket("wss://www.bitmex.com/realtime?subscribe=trade:XBTUSD");

ws.onopen = function(){
  ws.send(JSON.stringify({"trade":"XBTUSD"}))
};

ws.onmessage = function (msg){
    var resp = JSON.parse(msg.data);
    console.log(resp);  

    var price = resp['data'][0].price; // can not read property 0 of undefined :/

    console.log('Price is : ' + price);


};

});

【问题讨论】:

  • onmessage函数中msg参数的结构是什么?我问它是因为可能 resp 没有 data 属性,因为您已经将 msg.data 存储在 resp 中。
  • 你能告诉我们控制台日志正在打印什么
  • 我已附上控制台截图。
  • 能否添加console.log(resp);导致问题?
  • 在任何resp 变量日志中都没有data 属性。

标签: javascript api bitmex


【解决方案1】:

检查resp/resp.data 是否为空。如果resp/resp.data 为空,则索引0 处没有任何内容。

   ws.onmessage = function (msg){
       var resp = JSON.parse(msg.data);
       console.log('Data : ' + data);  
       console.log('resp: ' + resp);  
       var price;
       if(resp && resp.data){
          price = resp.data[0].price; // can not read property 0 of undefined :/
       }

       console.log('Price is : ' + price);

      //document.getElementById('btcPrice').value = price;

   };

【讨论】:

  • 我建议使用由 facebook 团队制作的实用功能,以防止出现这些情况:github.com/facebookincubator/idx
  • 错误消失但现在价格未定义。我将发布控制台的屏幕截图。
  • 我已经更新了我的答案。请试试这个。如果0未定义,则没有价格可推论。
  • 现在显示:未捕获的 ReferenceError: data is not defined
  • if(){}之前,打印resp,看看它的长度并检查是否有resp['data']存在
猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多