curl PHP调用未返回API数据

rmbxnbpk  于 2022-11-13  发布在  PHP
关注(0)|答案(1)|浏览(153)

我正在使用此链接从API https://api-ninjas.com/api/airquality获取空气质量数据
我想通过PHP来实现这一点,因为这是一项要求
我有我的PHP文件

<?php

// Display errors is set to on and should be removed for production
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

// Timing script execution
    $executionStartTime = microtime(true);

    $url='https://api.api-ninjas.com/v1/airquality?city=' . $_REQUEST['countryName'];
// Curl object is initiated
    $ch = curl_init();
    
//Curl_setopt() takes three parameters(Curl instance to use, setting you want to change, value you want to use for that setting)    
    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['result'] = $decode['result'];

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

    echo json_encode($output); 

?>

然后是我的JavaScript函数

function getAirQuality(countryName) {
    $.ajax({
        method: 'GET',
        url: "assets/php/getAirQuality.php",
        data: {
               countryName: countryName
                },
        headers: {
            'X-Api-Key': 'API_KEY'
        },
        contentType: 'application/json',
        success: function(result) {
            console.log(result);

            $('#aqCO').html(result['CO']['concentration'] + ' ppm');
            $('#aqSO').html(result['SO2']['concentration'] + ' ppm');
            $('#aqO3').html(result['O3']['concentration'] + ' g/m3');
            $('#aqNO2').html(result['NO2']['concentration'] + ' ppm');
            $('#aqPM2').html(result['PM2.5']['concentration'] + ' µg/m3');
            $('#aqPM10').html(result['PM10']['concentration'] + ' µg/m3');
        },

        error: function ajaxError(jqXHR) {
            console.error('Error: ', jqXHR.responseText);
        }
    });
}

但是,PHP文件在控制台Error: <br /> <b>Warning</b>: Undefined array key "result" in <b>C:\xampp1\htdocs\project1\assets\php\getAirQuality.php</b> on line <b>30</b><br /> {"status":{"code":"200","name":"ok","description":"success","returnedIn":"293 ms"},"result":null}中一直抱怨
从上面的网站可以看到,结果应该是这样的

{
  "CO": {
    "concentration": 223.64,
    "aqi": 2
  },
  "NO2": {
    "concentration": 9.08,
    "aqi": 11
  },
  "O3": {
    "concentration": 26.46,
    "aqi": 22
  },
  "SO2": {
    "concentration": 0.78,
    "aqi": 1
  },
  "PM2.5": {
    "concentration": 4.04,
    "aqi": 13
  },
  "PM10": {
    "concentration": 6.23,
    "aqi": 5
  },
  "overall_aqi": 22
}

我不知道还能是什么?我试过resultresultsdata

***UPDATE***因此,虽然我已将数据解码为正确

result
: 
CO
: 
{concentration: 223.64, aqi: 2}
NO2
: 
{concentration: 19.71, aqi: 24}
O3
: 
{concentration: 52.93, aqi: 44}
PM2.5
: 
{concentration: 11.67, aqi: 37}
PM10
: 
{concentration: 14.61, aqi: 13}
SO2
: 
{concentration: 1.97, aqi: 2}
overall_aqi
: 
44

我试着把它们赋值给这样的变量:$('#aqCO').html(result['CO']['concentration'] + ' ppm');,但它返回的是Uncaught TypeError: Cannot read properties of undefined (reading 'concentration')

k3bvogb1

k3bvogb11#

您可以通过创建数组并通过以下方式传递头:弯曲_高温集管

$headers = ['X-Api-Key: API_KEY'];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);

相关问题