我很抱歉,因为我知道有人问过这个问题 before ,超过 once .
我已经和这个小家伙斗争了好几个小时了,但我似乎找不到我的错误。
问题很简单 - 我有一个 PhP 数组,我想使用 jQuery AJAX 和 JSON 格式的数据将其从服务器端传递到客户端。
我的客户端 Ajax 调用的代码是
$.ajax({
url: 'php/test/pass_array.php',
method: 'POST',
data: {test1: 'abc', test2: 'cde'}, //Random input data
dataType: 'json',
success: function(response_data)
{
console.log(response_data);
},
error: function(jqXHR, textStatus, errorThrown)
{
console.log(arguments);
console.log('Error: ' + errorThrown + ' ' + textStatus + ' ' + jqXHR);
}
});
我的服务器端 pass_array.php 脚本的代码是
header('Content-type: application/json; charset=utf-8');
echo json_encode(array("Name"=>"Johnny")); //Build JSON object from the array
正如您所看到的,这是非常基本的,但它不起作用。在客户端,永远不会收到 AJAX 响应。
当我检查浏览器控制台日志时,我得到
Error: SyntaxError: Unexpected token parsererror [object Object]
我到底做错了什么?魔鬼?
我的所有文件均采用 UTF-8 编码。如果我删除 PhP 端的 dataType: 'json' 和 header() ,这也有效。在这种情况下,我得到以下字符串:
{"Name":"Johnny"}
更新
注释掉 PhP 端的 header() 代码会使控制台显示以下错误:
Uncaught SyntaxError: Unexpected token o
怎么会有语法错误呢?我创建了一个 PhP 数组并使用 json_encode 对其进行编码。
更新#2
已修复。
在我的 PhP 文件中,我有(只有一个!)行
include '../core/db_io.php';
我评论了该行并且效果很好。
此文件包含查询我的数据库的方法。由于我没有从该文件中调用任何方法或对象,因此我没有对其进行注释 - 认为这没有什么区别。
看起来,db_io.php 文件在 JSON 字符串中添加了一个字节顺序标记字符 (\ufeff)。
发送到客户端的完整字符串是
\ufeff{"Name":"Johnny"}
这个 db_io.php 文件似乎是用 BOM 编码的。更改其编码(使用 Notepad++ )解决了这个问题。
令人惊奇的是,一个简单的 include 指令会搞乱 AJAX 调用。
最佳答案
尝试检查您的 ajax 函数是否被触发,以及是否有任何请求被发送到您的 php 代码。例如,您的 ajax 脚本中可能存在某些语法,或者您没有提供 php 文件的 url。
关于php - 错误 - 使用 JSON 将数组从 PhP 传递到 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461493/