我正在使用 PHPjson_encode()
返回一些由 jQuery 检索的数据ajax()
:
简化的 JS:
$.ajax({
dataType: 'json',
contentType: 'application/json',
cache: false,
type: 'POST',
url: './api/_imgdown.php',
error: function(jqXHR, textStatus, errorThrow) {
console.log(jqXHR, textStatus, errorThrow);
},
success: function(data, textStatus, jqXHR) {
console.log(data, textStatus, jqXHR);
}
});
PHP 是:
header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
然后当 php 运行我的代码时,它通过添加以下数据结束:
$apiResponse['data'][] = [
"mid" => (int)$mid,
"card_type" => $card_type,
"header_size" => (int)$headers['Content-Length'],
"saved_size" => (int)filesize($imgSavePath),
"saved_path" => $imgSavePath
];
//spit out the JSON
echo json_encode($apiResponse);
exit();
JSON:
{"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]}
起初它似乎是有效的。我的 Ajax 检索这个 PHP 总是以parseerror
(因此进入的error
部分ajax()
)结束。
如果您将此 JSON 复制并粘贴到http://jsonlint.com/上,它会显示“意外令牌”并且http://jsonformatter.curiousconcept.com/会说无效。
echo json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
即使转义斜线没问题,我也尝试过,\/
但没有任何区别。
但是什么是不完全有效的?PHP 不应该返回有效的 JSON 吗?
额外信息:在 Windows7、Chrome v28.XX 上进行测试,在 Apache 上使用 PHP 5.4.XX
在实际发布此问题之前我读过的问题:
- json_encode 创建格式错误的 JSON 数据?
- https://stackoverflow.com/a/15654848/684932
- 关于 json_encode 和 ajax 数据类型:“json”
- php json_encode 没有返回正确的 json 编码字符串
更新:
从 SO 复制到 JSONlint 会给出有效的 json。所以我进一步调查并注意到 PHP 正在创建一个奇怪的隐藏字符,实际上使 json 无效。请参见下面的屏幕截图。我该如何解决?