错误 - 使用JSON将数组从PhP传递到jQuery

时间:2013-12-09 01:16:29

标签: php jquery ajax arrays json

我道歉,因为我知道这已被问及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调用。

4 个答案:

答案 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');