[解决方案]将相关的 .php 文件保存在 ANSI 中解决了这个问题。检查接受的答案以获取更多信息。
尝试解析来自 PHP 的 JSON 时,我在控制台中收到此错误json_encode()
:
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
without的输出header('Content-Type: application/json; charset=utf-8');
:PasteBin
与header('Content-Type: application/json; charset=utf-8');
: PasteBin
缺少或无效的标头可能会导致响应以意外的格式出现,并在开头留下一个不可见的 '\ufeff' 标记。这用于说明接收到的消息的字节序并使其对任何接收者可读(但难以在应用程序内部使用)。
在您是发件人的情况下,您将需要调整您的标题以获得正确的字符集和内容类型。
在您是接收者的情况下,您可以通过删除第一个字符并在正文上调用 JSON.parse(或您的语言的等效项)将响应转换为有效的 JSON。
有关更多信息,请参阅此问题、答案和 wiki:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句