[解决方案] 在ANSI中保存相关的.php文件解决了这个问题。查看已接受的答案以获取更多信息。
在尝试解析来自PHP json_encode()
的JSON时,我在控制台中收到此错误:
VM2538:1 Uncaught SyntaxError: Unexpected token in JSON at position 0
at JSON.parse (<anonymous>)
at Object.success (products.js:169)
at i (jquery-v3.2.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-v3.2.1.min.js:2)
at A (jquery-v3.2.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-v3.2.1.min.js:4)
我尝试将MySql的服务器和表格排序设置为utf8_unicode_ci,如某些答案所示,但没有区别。
还将<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
添加到HTML头,将header('Content-Type: application/json; charset=utf-8');
添加到PHP文件,这会稍微改变json_encode()
的输出。 (两个例子都包含在底部)
[已更新] 以下是JavaScript: (atm我只是想将一个值记录到控制台,所以成功功能还没有完成)
function loadProducts() {
$.ajax({
method: 'GET',
dataType: 'json',
url: 'ajax/list_products.php',
success: function(products) {
var json = products;
console.log(json);
console.log(json[0].Code);
console.log(json[0]["Code"]);
}
});
}
这是来自list_products.php
的PHP代码:
<?php
$root = $_SERVER['DOCUMENT_ROOT'];
require_once $root . "/commander/class/product.php";
$product = new Product();
$productList = $product->listProducts();
if (!empty($productList) > 0) {
echo json_encode($productList);
}else {
echo "Error - Records are empty.";
}
这是list_products.php
没有header('Content-Type: application/json; charset=utf-8');
的输出:PasteBin
header('Content-Type: application/json; charset=utf-8');
:
PasteBin
答案 0 :(得分:0)
标题丢失或无效可能导致响应以意外格式出现,并在开头留下一个不可见的'\ ufeff'标记。这用于表示所接收消息的字节顺序,并使其对任何接收者都可读(但在应用程序内很难使用)。
如果您是发件人,则需要调整标头以获得正确的字符集和内容类型。
如果您是接收者,您可以通过删除第一个字符并在正文中调用JSON.parse(或您的语言等效)来将响应转换为有效的JSON。
有关详细信息,请参阅此问题,答案和wiki:
'Unexpected token' when using JSON.parse from array made in PHP