XML的代替者----JSON


Posted in Javascript onJuly 21, 2007

我个人觉得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格式错误,也只会弹出一个提示框,而不会抛出一个脚本错误!

Javascript 相关文章推荐
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
JQuery 获得绝对,相对位置的坐标方法
Feb 09 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
前端轻量级MVC框架CanJS详解
Sep 26 Javascript
分享一款基于jQuery的视频播放插件
Oct 09 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
如何用js判断dom是否有存在某class的值
Feb 13 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
原生js检测页面加载完毕的实例
Sep 11 Javascript
Vue 实现一个命令式弹窗组件功能
Sep 25 Javascript
vue实现移动端input上传视频、音频
Aug 18 Javascript
js右键菜单效果代码
Jul 21 #Javascript
$()JS小技巧
Jul 21 #Javascript
IE 缓存策略的BUG的解决方法
Jul 21 #Javascript
用JS实现的一个include函数
Jul 21 #Javascript
代码精简的可以实现元素圆角的js函数
Jul 21 #Javascript
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 #Javascript
用javascript实现读取txt文档的脚本
Jul 20 #Javascript
You might like
支持oicq头像的留言簿(一)
2006/10/09 PHP
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
babel基本使用详解
2017/02/17 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
开办大学饮食联盟创业计划书
2014/01/29 职场文书
出纳员的岗位职责
2014/02/22 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android