【问题标题】:Cannot read property 'Drivers' of undefined无法读取未定义的属性“驱动程序”
【发布时间】:2019-06-08 16:22:48
【问题描述】:

这是我第一次在这里发帖,但我迫切需要一个解决方案。如果我的问题格式不正确,我很抱歉。所以基本上我正在努力将json数据附加到我的html中的段落。我的 API 没问题,我用 console.log 检查了数据在那里,但是每次我尝试附加数据时,我的控制台中都会弹出一个错误:Uncaught TypeError: Cannot read property 'Drivers' of undefined。

我尝试从函数中删除 MRData,但这似乎没有任何作用。

     $.getJSON("http://ergast.com/api/f1/2016/drivers.json", function(MRData) {
        console.log(MRData);
        var drId = MRData.DriverTable.Drivers[0].driverId;
        var permanentNum = MRData.DriverTable.Drivers[0].permanentNumber;
        var kod = MRData.DriverTable.Drivers[0].code;
        $('#p0').append(drId);
        $('#p1').append(permanentNum);
        $('#p2').append(kod);
   })
    <body>
          <p id="p0"></p>
          <p id="p1"></p>
          <p id="p2"></p>
    </body>

我希望在这里完成的是从每个变量中获取字符串并将它们附加到我的段落中。

【问题讨论】:

  • 也发布您的console.log 输出?
  • MRData.MRData.DriverTable.Drivers[0].driverId 等。您解析的 JSON 是一个对象,其键名为 MRData。调用你的回调参数data,然后调用data.MRData.DriverTable.Drivers[0].driverId,这样更容易理解。
  • 是的,解决了它,我将回调参数重命名为数据,现在一切正常。谢谢!

标签: javascript json api


【解决方案1】:

在 json 文件中你有一个变量 mrData 所以你的开始应该是

MRData.MRData.DriverTable.Drivers

如果你看一下你的 json 文件,它会说

{ 
  MRData={}
}

添加MRData= MRData.MRData; 应该可以解决问题。或者您可以简单地将 jsonfile 内容修改为{DriverTable:{// bla bla bla }}

    $.getJSON("http://ergast.com/api/f1/2016/drivers.json", function(MRData) {
        console.log(MRData);
        MRData= MRData.MRData; // here is a simple workout
      
        var drId = MRData.DriverTable.Drivers[0].driverId;
        var permanentNum = MRData.DriverTable.Drivers[0].permanentNumber;
        var kod = MRData.DriverTable.Drivers[0].code;
        $('#p0').append(drId);
        $('#p1').append(permanentNum);
        $('#p2').append(kod);
        
   })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
          <p id="p0"></p>
          <p id="p1"></p>
          <p id="p2"></p>
    </body>

【讨论】:

    【解决方案2】:

    你必须使用

    var MRData =data.MRData;
            console.log(data.MRData);
            var drId = MRData.DriverTable.Drivers[0].driverId;
            var permanentNum = MRData.DriverTable.Drivers[0].permanentNumber;
            var kod = MRData.DriverTable.Drivers[0].code;
            $('#p0').append(drId);
            $('#p1').append(permanentNum);
            $('#p2').append(kod);
       })
    

    您的接收者数据具有字段MRData,而您使用var MRData =data.MRData;

    【讨论】:

      【解决方案3】:

      问题是您认为结果数据是MRData,但实际上它是一个包含MRData 的对象。

      data = {
          MRData: {...}
      }
      

      访问 MRData 将使您的代码正常工作。

      $.getJSON("http://ergast.com/api/f1/2016/drivers.json", function(data) {
        //data is an object which will have MRData inside.
        var MRData = data.MRData;
        var drId = MRData.DriverTable.Drivers[0].driverId;
        var permanentNum = MRData.DriverTable.Drivers[0].permanentNumber;
        var kod = MRData.DriverTable.Drivers[0].code;
        $('#p0').append(drId);
        $('#p1').append(permanentNum);
        $('#p2').append(kod);
      })
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      
      <body>
        <p id="p0"></p>
        <p id="p1"></p>
        <p id="p2"></p>
      </body>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-25
        • 2021-11-03
        • 2019-01-11
        • 1970-01-01
        • 2020-08-25
        • 2021-09-16
        • 1970-01-01
        • 2020-04-06
        相关资源
        最近更新 更多