#javascript #php #decode
Вопрос:
пожалуйста, кто-нибудь может объяснить мне нижеприведенное и почему это не работает, я новичок в кодировании. почему мой php возвращает единственное значение из того, что он получает от API, но мой javascript пытается получить доступ к большему, чем это? Почему, когда я нажимаю на кнопку, она не отображает результаты на странице? как мне разрешить пользователям вводить значения для каждого API?
я использую этот API, http://api.geonames.org/countryCodeJSON ?formatted=trueamp;lat= 47,03amp;lng= 10,2amp;username=flightltd
вот кодирование на PHP
<?php
// remove for production
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$executionStartTime = microtime(true);
$url='http://api.geonames.org/countryCodeJSON?
formatted=trueamp;lat=47.03amp;lng=10.2amp;username=flightltd';
$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['countryCode'];
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($output);
вот javascript
$('#firstAPIsubmitButton').click(function() {
$.ajax({
url: "countryCode.php",
type: 'POST',
dataType: 'json',
success: function(result) {
console.log(JSON.stringify(result));
if (result.status.name == "ok") {
$('#languages').html(result['data'][0]['languages']);
$('#distance').html(result['data'][0]['distance']);
$('#countryCode').html(result['data'][0]['countryCode']);
$('#countryName').html(result['data'][0]['countryName']);
}
},
error: function(jqXHR, textStatus, errorThrown) {
// your error code
}
});
});
вот что у меня есть в HTML
<body>
<div id="firstAPI">
<button id="firstAPIsubmitButton">first button</button>
<table>
<tr>
<td align="right">Languages:</td>
<td id="languages"></td>
</tr>
<tr>
<td align="right">Distance:</td>
<td id="distance"></td>
</tr>
<tr>
<td align="right">Country Code:</td>
<td id="countryCode"></td>
</tr>
<tr>
<td align="right">Country Name:</td>
<td id="countryName"></td>
</tr>
</table>
</div>
<script type="application/javascript" src="jquery-2.2.3.min.js"></script>
<script type="application/javascript" src="script.js"></script>
Ответ №1:
Ваш результирующий JSON выглядит следующим образом
{
"status":
{"code":"200",
"name":"ok",
"description":"success",
"returnedIn":"219ms"
},
"data":"AT"
}
Итак, этот код обращается к множеству свойств, которых просто не существует.
if (result.status.name == "ok") {
$('#languages').html(result['data'][0]['languages']);
$('#distance').html(result['data'][0]['distance']);
$('#countryCode').html(result['data'][0]['countryCode']);
$('#countryName').html(result['data'][0]['countryName']);
}