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);