繁体   English   中英

PHP JSON 标头导致 JSON.parse 出错(使用 jQuery)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM