未捕获的 TypeError:无法读取 undefined 的属性(读取“stationName”)

Uncaught TypeError: Cannot read properties of undefined (reading 'stationName')

提问人:Jose Lages 提问时间:2/12/2023 最后编辑:marc_sJose Lages 更新时间:2/12/2023 访问量:127

问:

请原谅我这个愚蠢的问题,但老实说我无法解决这个问题。我已经搜索了一遍,但我仍然无法理解导致错误的原因。

我正在学习如何编码,其中一项练习的任务是创建一个基本的应用程序。但是,我正在使用 jQuery 和 PHP(我只是对它们有肤浅的理解)。

我能够连接并接收响应,但是,当我尝试使用 api 中的信息更新 html 时,它不起作用,并且在控制台中出现此错误:

未捕获的 TypeError:无法读取 undefined 的属性(读取“stationName”)

请参阅下面的代码:

[HTML全

<h2>Airport Weather</h2>

<select id="selectAirport">
  <option value="LPPR">Porto</option>
  <option value="LZZH">Zurich</option>
  <option value="LFPO">Paris</option>
  <option value="EGLC">London</option>
</select>
<button id="btnRun">Check weather</button>
<table>
  <tr>
    <td>Airport Name:</td>
    <td id="aiport"></td>
  </tr>
  <tr>
    <td>Time:</td>
    <td id="time"></td>
  </tr>
  <tr>
    <td>Temperature:</td>
    <td id="temp"></td>
  </tr>
  <tr>
    <td>Humidity:</td>
    <td id="humidity"></td>
  </tr>
  <tr>
    <td>Clouds:</td>
    <td id="clouds"></td>
  </tr>

  <tr>
    <td>Wind Direction:</td>
    <td id="windDirection"></td>
  </tr>
  <tr>
    <td>Wind Speed:</td>
    <td id="windSpeed"></td>
  </tr>
</table>

JS:

$('#btnRun').click(function () {
  $.ajax({
    url: 'php/getUrl.php',
    type: 'POST',
    dataType: 'json',
    data: {
      search: $('#selectAirport').val(),
    },
    success: function (result) {
      console.log(JSON.stringify(result));

      if (result.status.name == 'ok') {
        $('#airport').html(result['data'][0]['stationName']);
        $('#time').html(result['data'][0]['datetime']);
        $('#clouds').html(result['data'][0]['clouds']);
        $('#windDirection').html(result['data'][0]['windDirection']);
        $('#windSpeed').html(result['data'][0]['windSpeed']);
        $('#temp').html(result['data'][0]['temperature']);
        $('#humidity').html(result['data'][0]['humidity']);
      }
    },
    error: function (jqXHR, textStatus, errorThrown) {
      //
    },
  });
});

PHP的:

<?php

// remove for production

ini_set('display_errors', 'On');
error_reporting(E_ALL);

$executionStartTime = microtime(true);


$url = 'http://api.geonames.org/weatherIcaoJSON?ICAO=' . $_REQUEST['search'] . '&username=joselages';


$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);

curl_close($ch);

$decode = json_decode($result, true);

$output['status']['code'] = "200";
$output['status']['name'] = "ok";
$output['status']['description'] = "success";
$output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . " ms";
$output['data'] = $decode['weatherObservation'];


header('Content-Type: application/json; charset=UTF-8');

echo json_encode($output);

?>

有人可以好心地告诉我我做错了什么吗?

感谢您的耐心等待

php jquery ajax web 错误处理

评论

1赞 KIKO Software 2/12/2023
问题似乎出在 ,具体来说在 。现在我们不知道这个结果是什么样子的,但你的错误说它不存在。resultresult['data'][0]['stationName']result['data'][0]
0赞 Jose Lages 2/12/2023
@KIKOSoftware,感谢您的帮助,结果如下: {“status”:{“code”:“200”,“name”:“ok”,“description”:“success”,“returnedIn”:“92 ms”},“data”:{“elevation”:73,“lng”:-8.6666666666666666666,“observation”:“LPPR 112330Z 10005KT 040V110 CAVOK 07/00 Q1027”,“ICAO”:“LPPR”,“clouds”:“clouds and visibility OK”,“dewPoint”:“0”,“cloudsCode”:“CAVOK”,“datetime”:“2023-02-11 23:30:00”,“countryCode”:“PT”,“temperature”:“7”,“humidity”:61,“stationName”:“Porto / Pedras Rubras”,“weatherCondition”:“n/a”,“windDirection”:100,“hectoPascAltimeter”:1027,“windSpeed”:“05”,“lat”:41.216666666666667}}
0赞 Jose Lages 2/12/2023
结果被返回,我只是不明白为什么我无法从数据更新innerHtml。我敢打赌,这真的很傻,我太累了,找不到它。但它一直在让我头晕目眩。
1赞 76484 2/12/2023
它看起来不像是一个数组,而是一个对象。这表明您想要(或者,或者,)。result['data']result['data']['stationName']result.data.stationName
0赞 Md. Al Amin Hossain 2/12/2023
jQuery('#airport').html(result['data']['stationName']); .您可以以这种格式显示数据。这里的结果数据是一个单独的数组,所以这里不需要使用 [0]

答: 暂无答案