Php Chrome中的JSON无效,Firefox中没有问题(太奇怪了!)
所有钥匙都是双引号。 整个元素是一个对象。 Firefox运行良好,但Chrome报告“无效JSON”。为什么? 这是完整的代码Php Chrome中的JSON无效,Firefox中没有问题(太奇怪了!),php,json,google-chrome,Php,Json,Google Chrome,所有钥匙都是双引号。 整个元素是一个对象。 Firefox运行良好,但Chrome报告“无效JSON”。为什么? 这是完整的代码 ///////////// PHP //////////////// public function listAlbumAction() { $params = $this->_getAllParams(); $albums = $this->_album->getAlbumList($params['albumType'], $pa
///////////// 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');
}
}
});
}
Firefox的JSON输出(Firebug):
我检查了一下,上面写着“有效的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" />
尝试将JSON(在PHP代码中)封装在括号中。。。在
parseJOSN
之前,在ajax调用的success函数中删除它们(基于您提供的Chrome和Firefox输出之间的差异),我的猜测是,您的PHP输出中有一些前导(或尾随)空格和/或换行符
您只为相关函数提供了PHP,但请检查主程序和加载了include()
或require()
的任何其他PHP文件中的
标记前后是否没有空格
这是PHP代码中相当常见的问题。在一个普通的HTML页面中,这其实并不重要(最终会产生大量虚假的空白,但这不会影响渲染),但是当输出其他类型的数据时,它可以决定数据是否有效。如果您正在输出二进制数据,这一点尤其正确。我以前没有用JSON看到这个问题,但是在你引用的字符串开始的空白空间是这类事情的一个经典符号。
你在PHP文件的开头有一个Unicode。正因为如此,而且因为它是在开始
之前,您的实际JSON输出是什么样子的?@Jahufar-ehjson_encode()
不发送任何头;它只生成一个字符串。对您来说是有效还是失败?(适用于我的Chrome。)在PHP文件的开头有Unicode BOM(字节顺序标记)吗?如果是这样的话,你能看看你的编辑器是否可以保存文件而不保存它,然后再试一次吗?@Matt Gibson:我用记事本++来写网页,我在没有BOM的情况下将它们全部更改为Utf8,它成功运行了!请将其作为答案发布,并解释原因:DI下载所有源代码,但找不到任何冗余空间。谢谢你的帮助,谢谢。顺便说一句,铬是如此严格。xDI在IE6和Safari4上也有类似的问题。你的回答帮助我解决了那个问题。谢谢
{"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":""}]}
<!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" />