`

json传输

 
阅读更多

 本文将解释如何使用AJAX和JSON分析器在客户端和服务器之间创建复杂的JSON数据传输层。

  一、 引言

  毫无疑问,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";

  在此,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>
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对象:

 

  一旦接收到响应消息,我们的称为displayResponse回调方法就会被激活,然后,我们就能够反串行化并开始使用这些对象:

 

<script type="text/javascript"> 
function displayResponse() 

 if(Ajax.checkReadyState(’loading’) == "OK") 
 { 
  var Auto = Ajax.request.responseText.parseJSON(); 
  document.getElementById("body").innerHTML += " 
<b>Remote JSON unserialized</b>"; 
  document.getElementById("body").innerHTML += " 
Car color: "+Auto.Car.color; 
  document.getElementById("body").innerHTML += " 
Wheel color: "+Auto.Car.Wheel.color; 
 } 

</script>
<

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

分享到:
评论

相关推荐

    android网络请求 json传输

    这就是Android中进行网络请求并使用JSON传输数据的基本流程。在实际应用中,还需要考虑网络权限、错误处理、数据缓存、线程管理等问题。同时,为了提高用户体验,通常会在主线程之外执行网络请求,可以使用AsyncTask...

    Ajax中使用JSON传输数据

    JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易读性、易写性和高效性,成为了Ajax通信中数据传输的首选格式。本篇文章将深入探讨在Ajax中如何使用JSON来传输数据,以及涉及到的相关工具和...

    struts2 json传输对象文档+jar包

    标题提到的"struts2 json传输对象文档"是指Struts2支持JSON格式的数据传输,使得Action类可以直接返回JSON对象,以便在客户端进行处理。这种功能极大地提高了Web应用的响应速度和用户体验,因为可以避免不必要的页面...

    ajax与php利用json传输数据,实现局部刷新

    标题"ajax与php利用json传输数据,实现局部刷新"涉及的主要知识点包括: 1. **Ajax工作原理**:Ajax通过JavaScript创建XMLHttpRequest对象,打开一个与服务器的连接,发送请求,监听状态变化,当服务器响应时,处理...

    Unity构建WebGL并集成MQTT使用Json传输数据

    在“Unity构建WebGL并集成MQTT使用Json传输数据”这一主题中,我们将探讨如何利用Unity创建WebGL项目,并结合MQTT协议和Json数据格式实现数据的实时通信。 首先,WebGL是一种基于JavaScript和OpenGL标准的API,允许...

    员工管理系统Android版Android客户端socket连接服务器json传输数据jdbc连接MySQL数据库.rar

    员工管理系统Android版Android客户端socket连接服务器json传输数据jdbc连接MySQL数据库.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    人工智能-项目实践-区块链-区块链学习项目,go后端,websocket连接,json传输,mongodb持久化.zip

    人工智能-项目实践-区块链-区块链学习项目,go后端,websocket连接,json传输,mongodb持久化 区块链学习项目,go后端,websocket连接,json传输,mongodb持久化

    json必须的jar文件,用json传输的来看看

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间的数据通信。在Java开发中,为了处理JSON数据,通常需要引入特定的库,如Jackson、Gson、org.json等,这些库提供了方便的...

    qt 局域网图像(json文件打包)传输

    qt 局域网图像(json文件打包)传输 在本项目中,实现了一个纯QT版本的局域网 QTcpSocket的包含字符串和图像信息的json格式的文件传输。在json中可以标示该图像的大小,该图像的名称,以及发送该json数据的客户端想要...

    Soket通信)手机做为服务端,PC做为客户端Demo_2版(用JSON传输数据)

    用手机端作为服务器端,PC作为客户端,手机端实时接收PC端传输的数据并显示,我这个例子显示的是PC端穿过来的几张图片交替在服务器端显示。文字传输用的是JSON传输,工程里有完整的JAVA中JSON的9个数据包。

    spring3.x前后端使用json传输数据

    在Spring 3.x版本中,JSON作为一种轻量级的数据交换格式,广泛用于前后端数据传输。本篇文章将详细介绍如何在Spring 3.x中使用JSON与jQuery进行前后端数据交互。 首先,为了支持JSON格式的数据处理,我们需要引入...

    php-curl+ajax+json数据传输2.0版本

    `PHP-cURL`、`AJAX` 和 `JSON` 是实现动态交互和数据传输的重要技术。本文将深入探讨这三者结合在“php-curl+ajax+json数据传输2.0版本”中的应用。 首先,`PHP-cURL` 是一个在PHP中使用的库,它允许开发者通过URL...

    Django 实现将图片转为Base64,然后使用json传输

    在本文中,我们将探讨如何使用Django框架将图片转换为Base64编码,并通过JSON进行传输。这个过程在处理图像数据时非常有用,特别是在需要在客户端(如浏览器)和服务器之间进行非传统方式的数据交换时。 首先,让...

    上传永久保存,这有30多万条音乐的json数据

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传输数据。它基于JavaScript的一个子集,设计为易于人阅读和编写,同时也易于机器解析和生成。JSON格式通常用于服务器向...

    rest风格webservice,服务端用的springmvc,客户端android,json传输,另附一个cxf的soap协议的wsdl服务端

    以前做java的初步理解了下android,为配合android实现所以实现了几个接口,此包是打包demo,包括3个项目,...1个接口只是测试,测试了双向json数据传输解析。还一个接口是网络上提供的手机归属地查询,实现了它的接口。

    java调用json参数的webservice

    JSON经常用于服务器与Web应用之间传输数据,其结构简洁,格式为键值对集合,易于计算机处理,同时也便于人类阅读和编写。 WebService是一种可以通过Web提供的服务,它使用XML消息传递进行通信。WebService技术可以...

    qt写的tcp客户端,可以连接公网ip,然后通过json传送一条指令告诉服务器自身的设备运行的平台(windows)

    TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,常用于实现客户端与服务器之间的通信。在本案例中,这个TCP客户端是用C++编程语言和Qt库编写的,Qt是一个跨平台的应用程序开发框架,支持...

    TCP收发json. 客户端和服务端

    通过分析代码,你可以学习到如何在实际项目中使用TCP进行可靠的数据传输,以及如何处理JSON数据。此外,也可以加深对QT Creator和TCP编程的理解,这对于进行网络通信相关的开发工作是非常有帮助的。

Global site tag (gtag.js) - Google Analytics