XAMPP 返回错误“JSON 输入意外结束”

Posted

技术标签:

【中文标题】XAMPP 返回错误“JSON 输入意外结束”【英文标题】:XAMPP returns error "Unexpected end of JSON input" 【发布时间】:2016-11-13 15:45:00 【问题描述】:

我正在尝试将 XAMPP 与以下 sn-ps 一起使用:

php

<?php
$api_endpoint = 'https://api.forecast.io/forecast';
$api_key = 'my-api-key';
$url = $api_endpoint . '/' . $api_key . '/' . '37.8267,-122.423';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$curl_response = curl_exec($curl);
curl_close($curl);
echo json_encode($curl_response);
?>

JSON 本身如下所示:


latitude: 37.8267,
longitude: -122.423,
timezone: "America/Los_Angeles",
offset: -7,
currently: 
time: 1468248192,
summary: "Clear",
icon: "clear-day"


javascript

$(document).ready(function()
$('#myButton').click(function(e)
e.preventDefault();
$('#myButton').fadeOut(300);
$.ajax(
  url: 'php/forecast.php',
  type: 'GET',
  dataType: 'json',
  success: function(data, status) 
      $('#content').html(data.latitude);
  ,
  error: function(xhr, desc, err) 
    console.log(xhr);
    console.log("Details: " + desc + "\nError:" + err);
  
);
);
);

我在实时服务器上运行良好,但在使用 XAMPP 时,我不断收到错误 JSON 输入意外结束。有没有人在使用 XAMPP 之前遇到过这个问题?有什么可能导致这种情况的想法吗?

【问题讨论】:

如果这正是你得到的,那么它不是有效的 json。 JSON 要求引用所有键。例如"timezone",不是timezone @Marc JSON 对象没问题;在我的帖子中,它缺少引号,因为我从浏览器中复制粘贴了一些值,我使用 JSONview 查看对象。正如下面的回复所发现的,问题是我的 XAMPP 需要 CA 来处理对 SSL 的请求。 【参考方案1】:

您的代码没问题,json 格式也没问题(如果您的代码在真实的 Web 服务器中运行,则没有理由认为 json 是错误的)。首先,你不需要json_encode,因为你知道你会从forecast.io服务器得到一个json响应。而且您的 ajax 已经包含 dataType: 'json'

这里的主要问题是您正在调用通过 SSL (https://api.forecast.io) 提供的端点,因此您本地 XAMPP 中的 php 服务器需要使用 CA(证书颁发机构)来确保通信有效。

XAMPP 通常不会免费为您提供此功能。所以,从http://curl.haxx.se/docs/caextract.html下载最新的CA pem文件并保存在C:\xampp\php\cacert.pem;然后编辑C:\xampp\php\php.ini 并查找curl.cainfo,取消注释并添加=C:\xampp\php\cacert.pem 以获得curl.cainfo = C:\xampp\php\cacert.pem

保存文件并重新启动本地 Apache 服务器。够了。

进一步说明,要调试您的 php 代码,您可能会考虑回显最终错误。所以在你的 php 代码中添加这样的东西:

$curl_response = curl_exec($curl);
if(curl_error($curl)) 
    echo 'error:' . curl_error($curl);

curl_close($curl);
echo ($curl_response);

并确保您可以在 ajax 中捕获错误字符串。

【讨论】:

感谢@teo - 效果很好,它也解释了为什么它在实时服务器上工作,但不使用 XAMPP。

以上是关于XAMPP 返回错误“JSON 输入意外结束”的主要内容,如果未能解决你的问题,请参考以下文章

服务器端“JSON 输入意外结束”错误

从我自己的服务器获取,错误:“JSON 输入意外结束”

在“...ge-2.2.1.tgz”,“engin”附近解析时出现错误的 JSON 输入意外结束

Angular2 HTTP POST发生错误SyntaxError:JSON输入意外结束

json输入意外结束反应[重复]

.Net core 3.1 + GraphQL ==> “错误”:“JSON 输入意外结束”