有人可以告诉我这个问题是什么:
我正在将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);?>));
});
所以基本上我回复了json格式的PHP数组,然后在javascript中解析它,但我在控制台日志中收到此错误:
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data
有谁能告诉我我做错了什么?
答案 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);?>'));
由于预期的参数是字符串。