[英]PHP JSON header causes error on JSON.parse (using jQuery)
我正在从PHP文件中获取一些JavaScript格式的JSON数据。
要使用数据,我使用JSON.parse(json_response)
,除非我在 PHP 中使用JSON 标头,否则它可以工作:
header('Content-Type: application/json');
使用时,我在控制台中收到以下消息:
未捕获的语法错误:JSON 中的意外标记 o 在位置 1
目前我只是在使用 PHP header()
或 JS JSON.parse()
之间进行选择,并发现了这个有用的问题。
看起来像是为我的 JS 脚本设置了一个 JSON 标头“自动解析” JSON。
header()
和JSON.parse()
之间随机选择可能不是一个好主意。 实际代码:
index.chart.php :
<?php
header('Content-Type: application/json');
// [...] <- config lines, no output
// Dummy data for Chart.js
$data = [
'labels' => ['test', 'a', 'z', 'e', 'r', 't'],
'datasets' => [
[
'label' => 'First',
'backgroundColor' => 'rgb(63, 123, 249)',
'borderColor' => 'rgb(31, 117, 219)',
'data' => [
20, 10, 30, 45, 51.2, 5
],
'fill' => false
]
]
];
echo json_encode($data);
?>
index.chart.js :
window.addEventListener('DOMContentLoaded', function () {
// jQuery Ajax
$.get('assets/inc/index.chart.php').done(function (json) {
var response = JSON.parse(json);
console.log(response);
}).fail(function (error) {
window.console.log(error);
});
});
如果您未指定dataType
则jQuery将使用Content-Type
标头确定从URL接收什么类型的数据,并通过适当的解析器运行它。
json
不是JSON的字符串,它是您通过解析JSON获得的JavaScript对象。
JSON.parse
的输入必须是JSON字符串。
更改:
function (json) { var response = JSON.parse(json);
至:
function (response) {
这是正常现象吗? 是什么原因造成的?
是的,这是正常现象,jQuery.ajax具有用于自动在返回的数据上运行某些功能的converters
。 对于返回JSON标头的请求,即jQuery.parseJSON
,这意味着传递给回调函数的数据已被解析为JSON。
我该怎么办 ? 在
header()
和JSON.parse()
之间随机选择可能不是一个好主意。
您是对的,这只会使您的代码难以遵循。 选择一个并在整个项目中保留它。 例如,如果您当前正在使用其他服务,而这些服务没有为JSON设置正确的标头,则建议您始终使用JSON.parse
而不在此处使用标头功能。
我对此可能是错的,但是:
在发送任何实际输出之前,必须先通过常规HTML标记,文件中的空白行或从PHP发送header()函数。
尝试删除php开头标签和标头函数之间的空间:
<?php
header('Content-Type: application/json');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.