所有键都用双引号引起来。 整个元素是一个对象。 Firefox 运行良好,但 Chrome 报告“无效的 JSON”。为什么?
这是完整的代码。
///////////// PHP ////////////////
public function listAlbumAction()
{
$params = $this->_getAllParams();
$albums = $this->_album->getAlbumList($params['albumType'], $params['from'], $params['numberOfAlbums']);
echo json_encode(array("code" => 0, "data" => $albums));
}
///////////////////////////////// JQuery ///////////////////
function loadAlbums()
{
$.ajax({
type: 'GET',
url: '/about-photo/list-album',
data: {albumType: selectedAlbumType, from: currentPageIndex * numOfAlbumsPerPage, numberOfAlbums: numOfAlbumsPerPage},
success: function(json) {
var obj;
var data;
try {
obj = $.parseJSON(json);
data = obj.data;
} catch(e) {
alert(e);
}
if(obj.code == 0) {
// get number of albums
var num = data.length;
// remove old list content
$('#albumListContent').remove();
var albumListHTML = '';
albumListHTML += '<div id="albumListContent">';
for(var i = 0; i < num; ++i) {
albumListHTML += '<div id="w' + data[i].album_id + '" class="imgWrapper">';
albumListHTML += '<img id="a' + data[i].album_id +
'" class="albumImg" width="150px" src="' +
data[i].album_cover + '" alt="not found" title="' +
data[i].album_name + '"/>';
albumListHTML += '<div class="albumTitle">' + data[i].album_name + '</div>';
albumListHTML += '</div>';
}
albumListHTML += '</div>';
$('#albumListContentWrapper').html(albumListHTML);
addAlbumHandler();
addPhotoEffects('.albumImg');
addImgErrorHandler('.albumImg');
}
}
});
}
编辑:Chrome (FirebugLite) 的 JSON 输出:
{"code":0,"data":[{"album_id":42,"album_name":"Best album","album_type":"photo","create_date":"09-05-2011 5:48:40","album_cover":"\/x\/media\/6.jpg","description":"Something here"},{"album_id":56,"album_name":"Test album","album_type":"photo","create_date":"09-05-2011 19:27:50","album_cover":"\/x\/media\/44227440_2f1f369517.jpg","description":"apples"},{"album_id":59,"album_name":"Album for something","album_type":"photo","create_date":"10-05-2011 16:19:03","album_cover":"\/x\/media\/apple-howto.jpg","description":"zzz"},{"album_id":62,"album_name":"Vietnam - Thailand - AFF Suzuki cup 2007","album_type":"photo","create_date":"17-05-2011 14:30:32","album_cover":"\/x\/media\/pwjps1231986828.jpg","description":""},{"album_id":63,"album_name":"CS","album_type":"photo","create_date":"17-05-2011 15:24:01","album_cover":"\/x\/media\/apple-logo.jpg","description":""},{"album_id":64,"album_name":"It works","album_type":"photo","create_date":"17-05-2011 15:24:56","album_cover":"\/x\/media\/it_works.png","description":""}]}
Firefox (Firebug) 的 JSON 输出:
{"code":0,"data":[{"album_id":42,"album_name":"Best album","album_type":"photo","create_date":"09-05-2011 5:48:40","album_cover":"\/x\/media\/6.jpg","description":"Something here"},{"album_id":56,"album_name":"Test album","album_type":"photo","create_date":"09-05-2011 19:27:50","album_cover":"\/x\/media\/44227440_2f1f369517.jpg","description":"apples"},{"album_id":59,"album_name":"Album for something","album_type":"photo","create_date":"10-05-2011 16:19:03","album_cover":"\/x\/media\/apple-howto.jpg","description":"zzz"},{"album_id":62,"album_name":"Vietnam - Thailand - AFF Suzuki cup 2007","album_type":"photo","create_date":"17-05-2011 14:30:32","album_cover":"\/x\/media\/pwjps1231986828.jpg","description":""},{"album_id":63,"album_name":"CS","album_type":"photo","create_date":"17-05-2011 15:24:01","album_cover":"\/x\/media\/apple-logo.jpg","description":""},{"album_id":64,"album_name":"It works","album_type":"photo","create_date":"17-05-2011 15:24:56","album_cover":"\/x\/media\/it_works.png","description":""}]}
我用 http://jsonlint.com/ 检查过它它说“有效的 JSON”
编辑:
从 Chrome 查看的来源:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
最佳答案
你有一个 Unicode Byte Order Mark在 PHP 文件的开头。因为这个,也因为它在开幕之前 <?php
,它会在您的 JSON 开头发送给客户端。这将使您的 JSON 无效,因为这些字符不应出现在 JSON 数据的开头。一些浏览器可以很好地应对;其他浏览器(例如 Chrome)则比较挑剔和提示。
通过在编辑器中未设置该选项的情况下保存文件来删除字节顺序标记(如何执行此操作取决于编辑器)将解决您的问题。
(您可能还会发现 header()
和其他发送 header 的 PHP 函数在您的 PHP 文件中也不起作用,给您输出已经开始的错误,再次因为 BOM 已经发送在你的 PHP 开始被解释之前。)
关于php - 在 Chrome 中无效的 JSON,在 Firefox 中没有问题(太奇怪了!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066901/