[原创]XML的代替者----JSON
August/16th 2006
在phpx.com上原载

我个人觉得PHP与Javascript各有长处,如果能完美的结合起来,那将创造出许许多多的奇迹! 我是初次写此类文章,Bug难免,请各位指正~
    现在AJAX应用非常流行,而在AJAX中客户端Javascript和服务端动态脚本的通信是关键。如果传输的信息比较简单,通常我们会直接采用字符串的方式,如果信息结构复杂一点,则通常用XML文档。XML文档虽然应用广泛,但是用php生成和用Javascript处理却不是一件很容易的事情。这里我推荐一种XML文档的比较好简化替代方案:JSON!
    首先我们来了解一下Javascript的基础知识。
    1.创建数组,可以用JS内建的类Array来初始化,也可以用JSON符号"[]"。下面通过两种方式创建的arr1和arr2的实质是一样的:

var arr1 = new Array();
arr1[0] = "apple";
arr1[1] = "google";
arr1[2] = "longbill";

var arr2 = ["apple","google","longbill"];

注意,数组的索引也可以是字符串,如 arr1["name"] = "longbill"; 这时的数组就相当于对象了。。。
    2.创建对象,可以用JS内建的类Object来初始化,也可以用JSON符号"{}"。下面通过两种方式创建的obj1和ob2的实质也是一样的:


var obj1 = new Object();
obj1.name = "longbill";
obj1.age = 18;

var obj2 = { name:"longbill",age:18 };

注意,这里"{"和"}"之间必须写成"键:值"的形式,而且不同的"键:值"之间要用","分割。 "键"中也可以包含空格等特殊字符,此时要用""(引号)来引用,如 "phone number":123456
    其实在JS中,数组的本质是一个对象,对象本身也是一个数组。所以, obj1.name 和 obj1["name"] 是同一个引用。
    我们还可以通过JSON符号的嵌套来定义复杂的S对象:


var people = [
    {
        name:"longbill",
        age:18
    },
    {
        name:"neal",
        age:19
    },
    {
        name:"glocklee",
        age:17
    }
];

//这个应该看的懂吧~~
大部分XML文档都可以用JSON来表达:


<?xml version="1.0"?>
<root>
  <book>
    <name>Ju love</name>
    <price>$15</price>
  </book>
  <book>
    <name>Javascrip</name>
    <price>$25</price>
  </book>
</root>


如果用JSON就可以表达为:

{
root:
[
  {
     name:"Ju love",
     price:"$15"
  },
  {
     name:"Javascript",
     price:"$25"
  }
]}


是不是简化很多?

    而且客户端JS处理起来也很简单,只要用执行字符串函数 "eval" 就可以将JSON信息提取出来,而如果是XML文档,那就不的不用大量的标准DOM操作来提取其中的数据。如:


//已经用AJAX从服务端下载了一个JSON文件(字符串),保存在变量 json 里
eval("var myvar = "+json);
//这样,JSON里的信息就表达在myvar这个变量里了。

缺点:一旦JSON的格式错误,将导致服务端JS系统错误,甚至崩溃。
   解决办法:
   最好在eval之前使用try(试探执行),如


//已经用AJAX从服务端下载了一个JSON文件(字符串),保存在变量 json 里
try {
    eval("var myvar = "+json);
} catch(e) { alert('json syntax error!'); }
//这样,即使JSON格式错误,也只会弹出一个提示框,而不会抛出一个脚本错误!


2733 read 11 comment(s)
#1
  2006年08月31号 12:25       回复
早在用了,嘿嘿
#2
<script>alert(1);</script>   2006年08月31号 12:26       回复
<script>alert(1);</script>
#3
<script>alert(1);</script>   2006年09月24号 15:35       回复
 <script>alert(1);</script>
#4
<td></td>   2006年09月24号 15:36       回复
<td></td>
#5
创亿无限   2006年10月05号 05:22       回复
使用简单规范的xml啊
比如禁止属性的第二种表示
尽量指定格式
#6
C.YF   2007年06月24号 21:50       回复
辛苦了
#7
Guest   2008年06月02号 16:20       回复
>><scipRt         >alert(2)</script>
#8
Guest   2008年06月05号 12:54       回复
原来验证方式从表单提交,改成了cookie提交,有创意,不过要防广告机还是很难,只要广告机把提交方式改成cookie提交你就又没治了,之所以现在能够防得住,是因为这个blog程序太没知名度了,如果哪天应用多了,保证那些发帖机都支持对这个blog发垃圾信息。
#9
longbill   2008年06月07号 00:02       回复
楼上的猜错了。我也没有用cookie提交。我是动态生成随机的字段名,也就是传的参数的名字是动态的。这样不管你用什么提交都不行,除非你可以获得我的参数名字。不过我最近又想到一个更好的办法。
#10
123   2008年06月11号 13:16       回复
零零碎碎  
#11
Guest   2008年12月12号 18:55       回复
呵呵
添加新的评论
称呼:*
邮件:*
网站:
内容:

Copyright © Longbill 2008-2024 , Designed by EndTo , Powered by EndCMS