`

[转]基于JSON的高级AJAX开发技术

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

基于JSON的高级AJAX开发技术

作者:朱先忠
来源:http://tech.51cto.com/art/200611/34100.htm

一、 引言

毫无疑问,AJAX已经成为当今Web开发中一种强有力的用户交互技术,但是它的许多可能性应用仍然鲜为人知。在本文中,我们将来共同探讨如何使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将详细讨论如何创建一组对象(在其它语言中经常被当作一个包),如何把这些对象串行化为JSON以发送到服务器端,以及如何把服务器端JSON反串行化为客户端JavaScript对象。

提示:你可以在Douglas Crockford的网站上找到本文中使用的JSON分析器。

在继续阅读前,本文假定你已经掌握了JavaScript技术并且了解如何创建一个基本的AJAX引擎,并经由AJAX技术向服务器端发出请求和从服务器端接收响应。为了更好地理解本文中示例,你需要下载本文相应的源码文件。

二、 开始

为了进一步抽象我们的AJAX请求并有助于我们以后在不同的应用程序间共享AJAX引擎代码,本文使用了一个我自己创建的AJAX引擎。为了使用这个引擎,我们简单地导入三个JavaScript文件并且向一个名为AjaxUpdater的对象发出请求。然后,由该引擎来负责处理其它任务,包括把响应代理到在该请求中指定的回调方法中。下面的示例展示了我们如何使用这个引擎发出请求以及导入相关的文件:

<script type="text/javascript"src="javascript/model/Ajax.js"></script>

<script type="text/javascript" src="javascript/model/HTTP.js"></script>

<script type="text/javascript" src="javascript/model/AjaxUpdater.js"></script>

<script type="text/javascript">

document.load = AjaxUpdater.Update(’GET’, URL, callback);

</script>



首先,让我们来讨论JavaScript对象。

三、 JavaScript对象

JavaScript以前经常被误解,似乎它主要用于实现客户浏览器端图形效果。其实,JavaScript是一种强有力的语言,特别当它与AJAX以及一个应用程序的服务器端相结合时;但是,即使在客户端,JavaScript也能够实现远比你预料得多的多的功能。面向对象的JavaScript就是一个示例,它能够使我们创建对象,扩展内在对象,甚至能够把我们的对象创建成包以达到更容易的管理之目的。

在本文示例中,我们将创建三个对象:Auto,Car和Wheel。其中,每一个都是简单的对象;在此,我们仅使用它们来展示如何创建一个基本包。

首先,Auto对象被声明为一个新的对象:

var Auto = new Object();



注意,这个Auto对象将用作Car对象的父类。因此,Car对象将成为Auto对象的一个属性,只不过它被分离到另一个文件中以更易于管理(这个概念经常被用于其它面向对象的语言中,但是在JavaScript中却并不经常提起它)。下面是这个Car对象相应的代码:

Auto.Car = new Object();

Auto.Car.color = "#fff";

Auto.Car.setColor = function(_color)

{

 Auto.Car.color = _color;

}

Auto.Car.setColor("#333");

如你所见,该Car对象是Auto对象的一个子对象—这分明是一种类对象层次结构。这个对象有一个名为color的属性和一个用于设置它的方法。在此,我们把color属性设置为灰色以覆盖掉缺省的白色。当在后面我们串行化该对象时请牢记住这个事实。

下一个对象,Wheel,是Car的一个子对象:

Auto.Car.Wheel = new Object();

Auto.Car.Wheel.color = "#000";


下面,让我们来分析一下为什么这些对象如此重要以及我们是如何使用它们提供的简单的属性的。

四、 把JavaScript对象串行化为JSON

借助于JSON分析器,我们可以很容易地把刚才创建的JavaScript对象串行化为JSON。首先,我们需要下载该分析器的一个副本,并且要把它添加到文档中。下面是我在本文示例中用于导入该脚本的相应的代码:

<script type="text/javascript" src="javascript/utils/jsonparser.js">
</script>
我已经把该分析器添加到我的javascript目录,即一个称为utils的子目录下。

下面是最终的包括到其中用于导入适当的JavaScript文件的代码片断:

<script type="text/javascript" src="javascript/Auto.js"></script>

<script type="text/javascript" src="javascript/Car.js"></script>

<script type="text/javascript" src="javascript/Wheel.js"></script>

<script type="text/javascript" src="javascript/utils/jsonparser.js"></script>

<script type="text/javascript" src="javascript/model/Ajax.js"></script>

<script type="text/javascript" src="javascript/model/HTTP.js"></script>

<script type="text/javascript" src="javascript/model/AjaxUpdater.js"></script>
在导入适当的文件后,我们可以通过把两个div元素和一个onload事件简单地添加到HTML文档中开始串行化。这两个div元素将分别拥有ID:body和loading。其中,这个loading标签将由AJAX引擎使用来指示进度情况,而body标签将用于显示消息。

<div id="loading"></div>

<div id="body"></div>
onload事件相应于body元素并且设置它的innerHTML属性为JavaScript对象(作为一个串行化的JSON字符串)。为了实现这一目的,我在Auto对象上使用了jsonparser.js文件内的toJSONString方法:

<body onload="document.getElementById(’body’).innerHTML = 
’<b>Local objects serialized as JSON</b>
<br/>Auto Object: ’+ Auto.toJSONString();">
这段代码使用了Auto对象及其所有的子对象,并且使用JSON分析器的toJSONString方法把它们串行化为一个JSON字符串。然后,该数据可以被用作服务器端的一种数据交换格式。

你可能还记得,在前面我们曾调用了一个称为setColor的方法来改变Car对象的颜色。当时,我使用它是因为我想向你展示串行化能够在运行时刻的任何点上实现,而且还为了反映出对象中最新的数据。

如果你仔细分析一下onload事件,你会注意到,Car和Wheel对象都包装在方括号内,这些方括号代表了父对象(即Auto)。这意味着,该串行化的JavaScript对象能够在运行时刻被发送到服务器端以存储最新的数据,并且也可以在应用程序启动时从服务器端进行接收以便从数据库中检索多数的当前数据。最精彩的部分在于,为了创建一种“无缝”的过程,所有与服务器之间实现的数据交换都可以使用JSON技术来实现。

下面,让我们来看一下相同的数据是如何从服务器端接收的,以及它们是如何被使用最新的数据(典型地,来源于一个数据库)串行化为客户端JavaScript对象的。

五、 把JSON反串行化为客户端JavaScript对象

在本文中,我简单地把一个静态文件创建为JSON响应,但是在实际开发中,你可以把这些数据存储在一个数据库中并且使用一种服务器端语言返回它。基于这一能力,我们就可以轻松地创建一种强有力的数据交换过程!在前面,我们已经分析了这一串行化过程。凭基本的AJAX体验,你应该能够理解数据是如何被寄送到服务器端的。现在,让我们着手讨论反串行化的问题。首先来看一个针对本文示例提供的静态JSON文件。这个文件其实是我们在上一节中串行化的数据:

{"Car":{"color":"#333","Wheel":{"color":"#000"}}}
作为一个请求JSON文件的示例,当我们点击下列链接时将请求这个串行化的Auto对象:

<a href="javascript:AjaxUpdater.Update(’GET’, ’json/data.js’,
 displayResponse);">Get remote JSON</a>
一旦接收到响应消息,我们的称为displayResponse回调方法就会被激活,然后,我们就能够反串行化并开始使用这些对象:

<script type="text/javascript">

function displayResponse()

{

 if(Ajax.checkReadyState(’loading’) == "OK")

 {

var Auto = Ajax.request.responseText.parseJSON();

document.getElementById("body").innerHTML += "<br/><b>Remote JSON unserialized</b>";

document.getElementById("body").innerHTML += "<br/>Car color: "+Auto.Car.color;

document.getElementById("body").innerHTML += "<br/>Wheel color: "+Auto.Car.Wheel.color;

 }

}

</script>

这是相当激动人心的一部分!一旦我们拥有了该responseText,我们就能够简单地使用JSON分析器中的parseJSON方法来从串行化的数据中重建我们的Auto对象。借助于这个新的Auto对象,我们就可以调用相应的子对象。这个特征允许我们在服务器和客户端来回发送对象—而不必进行大量的分析工作,然而在以前标准的XML响应情况下我们将却必须这样做。这样以来,我们就可以创建出能够基于AJAX技术来保留自身状态的客户端JavaScript对象。




分享到:
评论

相关推荐

    详谈基于JSON的高级AJAX开发技术

    详谈基于JSON的高级AJAX开发技术 详谈基于JSON的高级AJAX开发技术 详谈基于JSON的高级AJAX开发技术

    AJax详解.chm

    第 3 部分: Ajax 中的高级请求和响应 第 4 部分: 利用 DOM 进行 Web 响应 第 5 部分: 操纵 DOM 第 6 部分: 建立基于 DOM 的 Web 应用程序 第 7 部分: 在请求和响应中使用 XML 第 8 部分:在请求和响应中使用 XML 第...

    Ajax基础教程(扫描版)

     2005年,在web 2.0热潮中,ajax横空出世,迅速成为最炙手可热的web开发技术。google、microsoft、amazon和yahoo都已经全面采用ajax,新一代的网站如雨后春笋,迅速兴起。..  什么是ajax? ajax为什么会这么热,它...

    PHP+Ajax网站开发典型实例

    第7章 实现高级Ajax技术 实例 55创建工具提示 实例 56读取响应首部 实例 57动态加载列表框 实例 58显示进度条 实例 59数据无刷新写入文本文件 实例60 提供自动完成 实例61 实现级联菜单的设计 实例62 ...

    Ajax详解.rar

    本系列的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的讨论 —— 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘面纱,包括 XMLHttpRequest 对象。 五年前,如果不...

    Javascript 高级编程第2版PDF part4

    从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从高级前端开发技术到前沿的客户端存储,...

    Javascript 高级编程第2版PDF part1

    从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从高级前端开发技术到前沿的客户端存储,...

    Javascript 高级编程第2版PDF part5

    从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从高级前端开发技术到前沿的客户端存储,...

    Javascript 高级编程第2版PDF part3

    从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从高级前端开发技术到前沿的客户端存储,...

    PHP高级程序设计_模式、框架与测试(简体中文高清版)

    同时,为适应目前Web开发的新趋势,作者还全面探讨了MVC架构和Zend Framework,以及Ajax、JSON、SOAP等Web 2.0技术。书中穿插的大量软件开发实战经验和对PHP编程思想的感悟,将大大提升你的内在功力。 内容简介 ...

    javascript DOM 编程艺术

    从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)、文档对象模型(DOM)到基于事件的Web脚本设计,从XML(E4X)到Ajax及JSON,从高级前端开发技术到前沿的客户端存储,...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    大型互联网开发技术:代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站调优、采集器、RSS/XML、网站防黑(防XSS攻击、防注入漏洞攻击、防CC攻击、防挂马、防盗链、敏感词过滤、广告帖智能过滤)...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料;本资料仅用于学习。 【课程内容】 第1周 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if ...

    达内java培训目录

    企业应用开发部署环境 Linux高级命令集脚本编程、远程登录、Ant、单元测试技术、Maven构建技术、SVN应用技术。 熟练掌握基于Linux系统的操作技能;可以熟练的完成应用的部署工作;可以熟练的使用开发部署工具。 ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。  ...

    ThinkPHP 3.1.2 - PHP的开发框架MVC - 含Core,Extend,Example

    AJAX支持:内置和客户端无关的AJAX数据返回方法,支持JSON、XML和EVAL类型 返回客户端,而且可以扩展返回数据格式,系统不绑定任何AJAX类库,可随意使 用自己熟悉的AJAX类库进行操作。 SAE支持:提供了新浪SAE平台...

    Acunetix Web Vulnarability Scanner 11.0.17095.1158 Retail

    - DeepScan技术可以准确地爬行使用诸如SOAP / WSDL,SOAP / WCF,REST / WADL,XML,JSON,Google Web Toolkit(GWT)和CRUD操作等复杂技术的AJAX重型客户端单页应用(SPA) 。 - 业界最先进和最强大的SQL注入和跨...

    JAVA上百实例源码以及开源项目

    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...

    python入门到高级全栈工程师培训 第3期 附课件代码

    python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...

Global site tag (gtag.js) - Google Analytics