0

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

每隔一段时间,我向一个用这个对象响应的 php 文件发送一个请求,然后我想解析那个对象并相应地移动这些片段。

这是我的要求:

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

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

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

在 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;

有任何想法吗?我很难过

提前致谢。

4

1 回答 1

6

jQuerygetJSON为您反序列化 JSON,因此data将是一个对象图,而不是一个字符串。从文档中:

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

因此,由于data已经序列化,您不需要或不需要调用JSON.parse它。这样做会隐式调用toStringon data,这将返回[object Object]or [object Array],因此JSON.parse不喜欢将其作为输入。:-)data直接使用:

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

另外:除非您在未显示的地方声明,否则您的代码也会成为The Horror of Implicit Globals 的world牺牲品。你可能想在那里。但是有了上面的改变,你根本不需要这个变量,所以......var

于 2013-03-26T22:05:49.907 回答