php - PHP cURL 例程返回警告消息
问题描述
当我点击一个按钮,编程为从 Protected Planet 的 API 接收数据时,我收到一个似乎无法解决的错误。我已经看到isset()
了解决方案,但不知道它们是否适用于我的情况,因为我已经在他们从数据库请求密码/登录请求的设置中看到了它的建议。
我收到此错误:
<br />
<b>Warning</b>: Trying to access array offset on value of type null in <b>C:\xampp\htdocs\project1\libs\php\getProtectedPlanet.php</b> on line <b>25</b><br />
{"status":{"code":"200","name":"ok","description":"success","returnedIn":"101 ms"},"output":null}
Url 正在返回预期的结果。
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$executionStartTime = microtime(true);
$url='http://api.protectedplanet.net/v3/countries/' . $_REQUEST['iso'] . '?token=[REDACTED API TOKEN]';
$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['output'] = $decode["statistics"];
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($output);
?>
示例返回 json:
{"country":{
"name":"Canada",
"iso_3":"CAN",
"id":"CAN",
"geojson":{
"type":"Feature",
"properties":{
"fill-opacity":0.7,
"stroke-width":0.05,
"stroke":"#40541b",
"fill":"#83ad35",
"marker-color":"#2B3146"
},
"geometry":{
"type":"Polygon",
"coordinates":[
[[-141.006,41.669],[-141.006,83.117],[-52.617,83.117],[-52.617,41.669],[-141.006,41.669]]
]
}
},
"statistics":{
"pa_land_area":1185787.371,
"pa_marine_area":504723.3908,
"land_area":9955032.941,
"percentage_pa_land_cover":11.91143608,
"percentage_pa_marine_cover":8.857775688,
"marine_area":5698082.708,
"polygons_count":9110,
"points_count":20},
"pame_statistics":{
"assessments":74,
"assessed_pas":60,
"pame_pa_land_area":307619.9491,
"pame_percentage_pa_land_cover":3.090094805,
"pame_pa_marine_area":6980.110537,
"pame_percentage_pa_marine_cover":0.122499287
},
"region":{
"name":"North America","iso":"NA"
},
"pas_count":9130,
"pas_national_count":7958,
"pas_regional_count":0,
"pas_international_count":64,
"pas_with_iucn_category_count":9130,
"pas_with_iucn_category_percentage":100.0,
"links": ...data truncated
主要是我想访问"statistics"
密钥。
ajax 调用开始:
var getProtectedPlanetAPI = function() {
console.log("Button clicked");
console.log(isoa3);
$.ajax({
url: "libs/php/getProtectedPlanet.php",
type: 'POST',
dataType: 'json',
data: {
iso: isoa3
},
success: function(result) {...
正确的 iso 记录到控制台
解决方案
你需要改变
$output['output'] = $decode["statistics"];
到
$output['output'] = $decode['country']['statistics'];
根据返回的json。
推荐阅读
- python - 如何仅为现有数据框的一列添加新日期和值
- javascript - Zapier API 代码帮助 - 从 JSON 中提取数据
- docker - Docker Daemon API 升级到 v1.4
- javascript - 如何自动检测链接
- android - 将Activity 1中EditText获取的信息发送到Activity 2,并保存到Activity 2中的Recyclerview中
- listview - Delphi ListView DynamicAppearance如何在代码中指定一个Item的文本颜色?
- node.js - Mongoose:“地址 []”类型上不存在属性“拉”
- vb.net - VB Newtonsoft JSON.Net“无法加载文件或程序集”
- perforce - 执行 P4 annotate 命令时出现远程服务器错误
- javascript - 如何在我的不和谐机器人上显示来自网站的信息?