Chrome下获取二维JSON被反序的问题

JSON 自从被人们认识以来,就凭借其简易的编码解码方式,良好的可读性、可扩展性以及与 JavaScript 暧昧的关系,逐步吞噬掉了 XML 的空间,现在已经成为 AJAX 数据交换的绝对主力。但是,如果你从后台返回中得到了下面的 JSON,那么这可能会在 Chrome 浏览器中出现一些小问题,这正是本文所要讨论的。

var people = {
    "Zhang": {"age":28, "location": "成都"},
    "Lee": {"age":32, "location": "昆明"}
};

上面的代码看起来一切正常,张和李分别来自成都和昆明,一个28岁,一个32岁。我们接收了这个 JSON ,并赋给变量 people ,在 Firefox、IE、Safari 和 Opera 下没有任何问题,但是在 Chrome 中,这个 JSON 很不幸地被反转了:

var people = {
    "Lee": {"age":32, "location": "昆明"},
    "Zhang": {"age":28, "location": "成都"}
};

如果你事先知道了返回的数据中包含李和张的信息,这并不会对你的操作产生任何影响。但如果你对返回的信息内容一无所知,而需要使用 for in 来获取这个 JSON 的内容,那么这意味着在 Chrome 中将会得到与其他浏览器顺序刚好相反一组数据。事实上这并非 Chrome 的过错,这个时候你需要做的并不是针对 Chrome 进行反序,而是通知与你协作的后台程序员,让他们为你返回一个数组,这时得到的结果可以在各个浏览器安全地进行遍历。

var people = [
    "Zhang": {"age":28, "location": "成都"},
    "Lee": {"age":32, "location": "昆明"}
];

以 PHP 为例,后台需要进行像下面这样的调整:

$result = array();
for($i = 0 ; $i < 10 ; $i++){
    $result[$i]['name'] = 'xxx';
    $result[$i]['age'] = 000;
}
echo json_encode($result);

本文的最后一段代码展示了如何从 WordPress 中提取评论者名称并返回给前端的方法,希望对大家能有所帮助。

$result = array();
$comments = get_comments();
foreach($comments as $key=>$comment){
    $result[$key]["authorName"] = $comment -> comment_author;
}
echo json_encode($result);
posted @ 2011-10-27 12:12  tokeep  阅读(315)  评论(0编辑  收藏  举报