为什么我收到有关" JSON数据后出现意外的非空格的错误消息"

时间:2015-06-21 23:28:22

标签: javascript php arrays json

有人可以告诉我这个问题是什么:

我正在将PHP数组回显到javascript中,如下所示:

<?php 
    $myArray=array();
    foreach ($persons as $person) {
    array_push($myArray,$person['id']);
    }
?>

$(document).ready(function() {
    populatePersons(JSON.parse(<?php echo json_encode($myArray);?>));
});

所以基本上我回复了格式的PHP数组,然后在中解析它,但我在控制台日志中收到此错误:

SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data 

有谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:1)

这是因为你给JSON.parse提供了一个数组。如果你试图显示json,只需摆脱javascript中的JSON.prase并用JSON.stringify替换它。如果没有,则json_encode($ myArray)应足以进行操作。

//view file from database
exports.previewContent = function (req, res) {
    var contentId = new DBModule.BSON.ObjectID(req.params.contentid);
    console.log('Calling previewFile inside FileUploadService for content id ' + contentId);

    var gs = DBModule.db.gridStore(contentId, 'r');
    gs.read(function (err, data) {
        if (!err) {
            //res.setHeader('Content-Type', metadata.contentType);
            res.end(data);
        } else {
            log.error({err: err}, 'Failed to read the content for id ' + contentId);
            res.status(constants.HTTP_CODE_INTERNAL_SERVER_ERROR);
            res.json({error: err});
        }
    });
};

答案 1 :(得分:1)

  

有谁能告诉我我做错了什么?

虽然json_encode生成JSON,但您echo将其添加到JavaScript中。因此,它将被解释为JavaScript数组文字,而不是包含JSON的字符串。因此,您无法使用JSON.parse

摆脱它:

populatePersons(<?php echo json_encode($myArray);?>);

如果您查看生成的代码,您可以这样:

 populatePersons(JSON.parse([1,2,3]));

JSON.parse需要字符串(包含JSON)。因为JavaScript执行类型转换,所以它会首先将数组转换为字符串,这可能不会产生有效的JSON。

再说一遍:你已经有了一个数组,没有必要解析任何东西。

答案 2 :(得分:0)

尝试将json_encode字符串放在引号中。

populatePersons(JSON.parse('<?php echo json_encode($myArray);?>'));

由于预期的参数是字符串。