我已经在这个小小的虫子里挣扎了好几个小时了,我似乎无法找到我的错误。
问题很简单 - 我有一个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对其进行编码。
修正了它。
在我的PhP文件中,我(只有一个!)行
include '../core/db_io.php';
我评论说它排除了并且运行良好。
此文件包含查询数据库的方法。由于我没有调用此文件中的任何方法或对象,因此我将其取消注释 - 认为它没有任何区别。
看起来包括db_io.php文件在JSON字符串中添加了字节顺序标记字符(\ ufeff)。
发送到客户端的完整字符串是
\ufeff{"Name":"Johnny"}
这个db_io.php文件似乎是用BOM编码的。更改其编码(使用记事本++)修复了该问题。
令人惊讶的是,简单的include指令会如何搞乱AJAX调用。
答案 0 :(得分:1)
确保您的PHP脚本以<?php
更新1:
我在localhost上创建了两个文件 - index.html
<html>
<head>
<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
<script>
$.ajax({
url: '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);
}
});
</script>
</body>
</html>
pass_array.php
<?php
header('Content-type: application/json; charset=utf-8');
echo json_encode(array("Name" => "Johnny"));
控制台中AJAX调用的结果是:
Object {Name: "Johnny"}
确保网址正确访问正确的php文件。
您可以在“网络”标签下的Chrome检查器中查看任何“XHR”请求(AJAX)。
答案 1 :(得分:1)
尝试检查你的ajax函数是否被触发以及是否有任何请求被发送到你的php代码。例如,你的ajax脚本中可能有一些语法,或者你没有提供你的php文件的URL。
答案 2 :(得分:1)
修正了它。
在我的PhP文件中,我(只有一个!)行
include '../core/db_io.php';
我评论说它排除了并且运行良好。
此文件包含查询数据库的方法。由于我没有调用此文件中的任何方法或对象,因此我将其取消注释 - 认为它没有任何区别。
我仍然不明白 - 我没有以任何方式使用该文件 - 除了包含它。它为什么要干涉?
感谢您的想法。和平!
答案 3 :(得分:0)
Error: SyntaxError: Unexpected token
你有'token'变量的问题。你使用CMS或Framework吗?
尝试
console.log(arguments);
而且,你可以尝试发送
header('Content-type: application/json');