JSON.parse意外的字符

时间:2013-03-26 22:02:58

标签: javascript jquery ajax json mongodb

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

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

这是我的要求:

$.getJSON
(
    "e4.php",
    "",
    function(data)
    {
        world = JSON.parse(data);
        moveObjects(world);
    }
);

但我得到:JSON.parse:意外的字符

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

在e4.php中:

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

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

$conn->close();

print $doc['world'];

其中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;

有什么想法吗?我很难过

提前致谢。

1 个答案:

答案 0 :(得分:6)

jQuery的getJSON为您反序列化JSON,因此data将是对象图,而不是字符串。来自文档:

  

success回调传递返回的数据,该数据通常是JSON结构定义的JavaScript对象或数组,并使用$.parseJSON()方法进行解析。

因为data已经已经反序列化,所以您不需要或不需要在其上调用JSON.parse。这样做会隐式调用toString上的data[object Object]会返回[object Array]JSON.parse,因此data不会将其视为输入。 :-)直接使用$.getJSON ( "e4.php", "", function(world) // <=== Changed name of argument { moveObjects(world); // <=== Used it directly } );

world

另外:除非你在某个地方宣布var,否则你的代码也会成为The Horror of Implicit Globals的牺牲品。你可能想要{{1}}。但是通过上面的更改,您根本不需要变量,所以......