【发布时间】:2019-01-28 20:25:03
【问题描述】:
我在 JavaScript 中从 PHP 文件中获取了一些 JSON 数据。
要使用数据,我使用JSON.parse(json_response),除非我在 PHP 中使用 JSON 标头:
header('Content-Type: application/json');
使用时,我在控制台中收到以下消息:
未捕获的 SyntaxError:位置 1 处 JSON 中的意外标记 o
目前我只是选择使用 PHP header() 或 JS JSON.parse() 并找到 this useful question。
它看起来像为我的 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);
});
});
【问题讨论】:
-
我只使用 json_encode() 并且它可以正常工作...不确定为什么您会收到一个错误而不是另一个错误...似乎可能是一个错误...您能得到结果吗浏览器网络选项卡中的脚本?
-
console.log(json)看看你到底得到了什么……?如果有的话,标头不会解析内容,标头表示内容是 JSON 格式,所以 jQuery 会自动为您解析。 -
"这是正常行为吗?什么可能导致这个?": "如果没有指定,jQuery 将尝试根据 MIME 类型推断它响应(XML MIME 类型将生成 XML,在 1.4 中 JSON 将生成 JavaScript 对象,在 1.4 中脚本将执行脚本,其他任何内容都将作为字符串返回)" (Source (->
dataType) -
@deceze
console.log(json)withoutJSON.parse(使用 PHPheader) 输出一个解析良好的 JSON 对象。那将来自 jQuery 本身?
标签: javascript php jquery json ajax