декодирование API на PHP, javascript

#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']);
}