未接收到来自 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']);
我已经更新了下面的代码,并在进一步研究后将我的用户名添加到 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']);