首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP调用不返回API数据

PHP调用不返回API数据
EN

Stack Overflow用户
提问于 2022-11-02 19:31:22
回答 1查看 65关注 0票数 0

我使用这个链接从API https://api-ninjas.com/api/airquality获取空气质量数据

我想通过PHP来做这件事,因为它是一个要求

我有我的PHP文件

代码语言:javascript
复制
<?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函数

代码语言: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}中抱怨。

正如您从上面的网站上看到的,结果应该是这样的

代码语言:javascript
复制
{
  "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

更新,所以当我把数据解码的时候

代码语言:javascript
复制
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')

EN

回答 1

Stack Overflow用户

发布于 2022-11-02 19:50:34

您可以通过创建一个数组并通过:CURLOPT_HTTPHEADER传递它,从而传递标头。

代码语言:javascript
复制
$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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74294725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档