簡體   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