XAMPP返回错误" JSON输入的意外结束"

时间:2016-07-11 15:55:13

标签: javascript php json xampp

我试图将XAMPP与以下代码段一起使用:

php:

THE TIME NOW: 2016-07-11 16:55:15 BST

JSON本身看起来像这样:

<?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);
?>

javascript:

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

我在实时服务器上工作得很好,但在使用XAMPP时,我不断收到错误 JSON输入的意外结束。有没有人在使用XAMPP之前遇到过这个问题?关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分: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中捕获错误字符串。