JSON.parse意外的字符

Cru*_*her 0 javascript ajax jquery json mongodb

我有一个存储在mongoDB集合中的JSON对象.该对象表示5×图像,5y图像和tictactoe板图像的位置.

在一个间隔,我发送一个请求到一个响应该对象的php文件,然后我想解析该对象并相应地移动它们.

这是我的要求:

$.getJSON
(
    "e4.php",
    "",
    function(data)
    {
        world = JSON.parse(data);
        moveObjects(world);
    }
);
Run Code Online (Sandbox Code Playgroud)

但我得到:JSON.parse:意外的角色

当我在console.log数据时,firebug给了我正确的对象,所以我知道它正在正常返回.

在e4.php中:

$criteria = array("name" => "world");

$doc = $collection->findOne($criteria);

$conn->close();

print $doc['world'];
Run Code Online (Sandbox Code Playgroud)

其中conn是连接,而collection是我正在使用的集合.

数据库在e3.php中更新:

$encodedworld = $_REQUEST['data'];

$criteria = array("name" => "world");

$doc = $collection->findOne($criteria);

$doc['world'] = $encodedworld;

$collection->save($doc);

$conn->close();

print $encodedworld;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我很难过

提前致谢.

T.J*_*der 6

jQuery getJSON为你反序列化JSON,因此data将是一个对象图,而不是一个字符串.从文档:

success回调被传递返回的数据,其通常是JavaScript对象或阵列由JSON结构所定义和使用所解析的$.parseJSON()方法.

如此以来,data已经已经被反序列化,你不想要或需要调用JSON.parse它.这样做隐含的调用toStringdata,这将返回[object Object][object Array],因此JSON.parse不喜欢它作为输入.:-) data直接使用:

$.getJSON
(
    "e4.php",
    "",
    function(world)         // <=== Changed name of argument
    {
        moveObjects(world); // <=== Used it directly
    }
);
Run Code Online (Sandbox Code Playgroud)

另外:除非你宣布world某个你没有表现出来的地方,否则你的代码也会成为暗杀全球恐怖分子的牺牲品.你可能想要var在那里.但是通过上面的改变,你根本不需要变量,所以......