【发布时间】:2013-12-26 00:33:42
【问题描述】:
我很抱歉,因为我知道有人问过这个问题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' 和 heading() ,这也有效。在这种情况下,我得到以下字符串:
{"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 编码的。更改其编码(使用记事本++)解决了这个问题。
一个简单的 include 指令竟然会搞乱 AJAX 调用,真是太神奇了。
【问题讨论】:
-
你试过$.parseJSON(response_data)成功了吗?
-
可能输出 [{"Name":"Johnny"}]
-
从该错误看来,您正在尝试解析已经解析的对象。这真的是完整的代码吗?
-
奇怪,尝试按照文森特建议的方式检查响应数据。我的猜测是 PHP 在 JSON 字符串之前输出了一些警告/通知或其他内容。
-
选择POST请求可以查看AJAX调用的响应~
标签: php jquery ajax arrays json