Ajax中数据传递的一种模式:JSON
什么是 JSON
JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript 文件中,对其的访问无需通过基于 XML 的语言来额外解析。不过在使用 JSON 之前,很重要的一点是理解 javascript 中数组及对象字面量的特殊语法。
1.1 数组字面量
数组字面量,是用一对方括号括起一组用逗号隔开的 javascript 值,例如:
var as=["hi", 10, true , null];
1.2 对象字面量
对象字面量,是通过两个花括号来定义的。在花括号内可以放置任意数量的“名称-值”对,定义格 式字符串值”。除了最后一行外,每个“名称-值”对后必须有一个逗号(这与Perl 中的联合数组的定义有些类似)。例如:
var oCar = {
"color": "green",
"doors" : 3,
"paidFor" : false
};
1.3 混合字面量
我们可以混用对象和数组字面量,来创建一个对象数组,或一个包含数组的对象。(具体的我也不太清楚)
可能有人对json格式的文本不熟悉,我下面给大家写段json数据:
{
"planet":
{
"name":"earth",
"type":"small",
"info":["Earth is a small planet,third from the sun","two-thirds","climated and landcapes"]
}
}
下面是一个简单的例子:
function showInfo(event)
{
var planet=this.id;
var scriptUrl=planet+".json";
new net.ContentLoader(scriptUrl,parseJSON);
}
function parseJSON()
{
var name="";
var descrip="";
var jsonTxt=net.req.responseText;
var jsonObj=eval("("+jsonTxt+")");
name=jsonObj.planet.name
var ptype=jsonObj.planet.type;
if(ptype)
{
descrip+="<h2>'+ptype+"</h2>";
}
var infos=jsonObj.planet.info;
descrip+="<ul>";
for(var i in infos)
{
descrip+="<li>"+infos[i]+"</li>\n";
}
descrip+="</ul>";
top.showPopup(name,descrip);
}
我们再一次使用ContentLoader来获取数据,并且分配一个回调函数parseJSON()。整个的响应文本是一条合法的JavaScript语句,因此我们可以用过简单的调用eval()函数来创建一个对象图:
var jsonObj=eval("("+jsonTxt+")");