未接收到来自 Geonames 的返回数据以用于呈现 HTML 响应的 API 请求

Not Receiving Data Back From Geonames For an API Request to Render a HTML Response

我已经更新了下面的代码,并在进一步研究后将我的用户名添加到 geonames 请求中,但仍然不高兴。

可能是我试图从 HTML 传递的值,所以我现在也包括了它。

          <td>1. Find Nearest Ocean</td>
          <td>
            <select id="latitudeOne">
              <option>40.78343</option>
              <option>133.7751</option>
              <option>106.3468</option>
            </select>

            <select id="longitudeOne">
              <option>-43.96625</option>
              <option>25.2744</option>
              <option>56.1304</option>
            </select>
          </td>
          <td><button id="btnRunOne">Run</button></td>
        </tr>

问题似乎出在 ajax 请求与从地名 API

获取数据请求之间
$('#btnRunOne').click(function() {
$.ajax({
    url: "php/ocean.php",
    type: 'POST',
    dataType: 'json',
    data: {
            lat: $('#latitudeOne').val(),
            lng: $('#longitudeOne').val()
    },
    success: function(result) {

        console.log(JSON.stringify(result));

        if (result.status.name == "ok") {

            $('#txtDistance').html(result['data'][0]['distance']);
            $('#txtGeonameID').html(result['data'][0]['geonameid']);
            $('#txtName').html(result['data'][0]['name']);
        }
        
    },
    error: function(jqXHR, textStatus, errorThrown) {
            // your error code
    }
});

和我需要发回数据的 php。我收到以下错误

警告C:\xampp\htdocs\geonamesExample\libs\php\getCountryInfo.php 中的未定义数组键“geonames”27

$output['data'] = $decode['geonames'];


<?php

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

    $executionStartTime = microtime(true);

    $url='http://api.geonames.org/oceanJSON?lat=' . $_REQUEST['lat'] . '&lng=' . $_REQUEST['lng'] . '&username=simonjadams';

    $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['geonames'];
    
    header('Content-Type: application/json; charset=UTF-8');

    echo json_encode($output); 

?>

有什么明显我遗漏的吗?

这是我试图从中获取信息的 GeoNames 服务:

海洋/反向地理编码 海洋或海洋的名称。 网络服务类型:REST Url : api.geonames.org/ocean? 参数:纬度、经度、半径(可选) 结果:returns 给定 latitude/longitude 的海洋 此处列出了服务返回的海洋。示例 http://api.geonames.org/ocean?lat=40.78343&lng=-43.96625&username=demo

此服务还提供 JSON 格式:api.geonames.org/oceanJSON?lat=40.78343&lng=-43.96625&username=demo

我从API看到的响应没有geonames字段,根字段是ocean

{"ocean":{"distance":"0","geonameId":3411923,"name":"North Atlantic Ocean"}}

所以你设置数据为ocean字段

$output['data'] = $decode['ocean'];

该字段是单个对象(不是对象数组),因此请删除 js 中的数组索引。

$('#txtDistance').html(result['data']['distance']);
$('#txtGeonameID').html(result['data']['geonameid']);
$('#txtName').html(result['data']['name']);