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