Ajax提高篇(5)使用JSON 进行数据传输

在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。Ajax 的另一种有用的数据格式 JavaScript Object Notation(JSON),使用它更轻松地在应用程序中移动数据和对象。
在许多异步应用程序中如何恰当地使用纯文本和简单的名称/值对。可以将数据组合成下面这样的形式:

mailto:firstName=Brett&lastName=McLaughlin&[email protected]

这样就行了,不需要再做什么了。实际上,Web 老手会意识到通过 GET 请求发送的信息就是采用这种格式。
如果使用 XML 数据格式,就可以将数据组合成下面的形式:

<request>
  <firstName>Brett</firstName>
  <lastName>McLaughlin</lastName>
  <email>[email protected]</email>
< /request>

这里的数据与前面看到的相同,但是这一次采用 XML 格式。这没什么了不起的;这只是另一种数据格式,使我们能够使用 XML 而不是纯文本和名称/值对。
实际上,除非有某种限制迫使您转向 XML,否则用不着考虑使用别的数据格式。显然,如果要向需要 XML 格式的输入的服务器端程序发送数据,那么希望使用 XML 作为数据格式。但是,在大多数情况下,对于需要向应用程序发送多段信息的服务器,XML 是更好的选择;换句话说,XML 通常更适合用来向 Ajax 应用程序做出响应,而不是从 Ajax 应用程

序发出请求。
在使用名称/值对或 XML 时,实际上是使用 JavaScript 从应用程序中取得数据并将数据转换成另一种数据格式。在这些情况下,JavaScript 在很大程度上作为一种数据操纵语言,用来移动和操纵来自 Web 表单的数据,并将数据转换为一种适合发送给服务器端程序的格式。、
但是,有时候 JavaScript 不仅仅作为格式化语言使用。在这些情况下,实际上使用 JavaScript 语言中的对象来表示数据,而不仅是将来自 Web 表单的数据放进请求中。在这些情况下,从 JavaScript 对象中提取数据,然后再将数据放进名称/值对或 XML,就有点儿多此一举 了。这时就合适使用 JSON:JSON 允许轻松地将 JavaScript 对象转换成可以随请求发送的数据(同步或异步都可以)。

1.JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端

程序。这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

(1)简单 JSON 示例:
按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:
{ "firstName": "Brett" }
这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:
firstName=Brett
但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" }

从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号

使这些值有了某种联系。

(2)值的数组:
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。
如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{ "people": [
   { "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
   { "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" },
   { "firstName": "Elliotte", "lastName":"Harold", "email": "[email protected]" }
 ]}

2.在 JavaScript 中使用 JSON:
(1)将 JSON 数据赋值给变量
例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

var people =
   { "programmers": [
     { "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
     { "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" },
     { "firstName": "Elliotte", "lastName":"Harold", "email": "[email protected]" }
    ],
   "authors": [
     { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
     { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
     { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
    ],
   "musicians": [
     { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
     { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
    ]
   }

这非常简单;现在 people 包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。
(2)访问数据
要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

people.programmers[0].lastName;
 
注意,数组索引是从零开始的。所以,这行代码首先访问 people 变量中的数据;然后移动到称为 programmers 的条目,再移动到第一个记录([0]);最后,访问 lastName 键的值。结果是字符串值 “McLaughlin”。
下面是使用同一变量的几个示例。

people.authors[1].genre   // Value is "fantasy"
people.musicians[3].lastName  // Undefined. This refers to the fourth entry,and there isn‘t one
people.programmers.[2].firstName // Value is "Elliotte"

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

(3)修改 JSON 数据
正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:

people.musicians[1].lastName = "Rachmaninov";
 
在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。
(4)转换回字符串
当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:

String newJSONtext = people.toJSONString();

这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。
更重要的是,可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:
String myObjectInJSON = myObject.toJSONString();
 
这就是 JSON 与其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。

版权声明:感觉我写的还算不错的的话希望你能够动动你的鼠标和键盘为我点上一个赞或是为我奉献上一个评论,在下感激不尽!_______________________________________________________欢迎转载,希望在你转载的同时,添加原文地址,谢谢配合

时间: 2024-10-10 04:42:48

Ajax提高篇(5)使用JSON 进行数据传输的相关文章

Ajax提高篇(6)服务器端脚本和程序中用 JSON 进行响应和回复

JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值之间得以快速转换.由于 Ajax 应用程序非常适合将纯文本发送给服务器端程序并对应地接收纯文本,相比不能生成文本的 API,能生成文本的 API 自然更可取:而且,JSON 让您能够处理本地 JavaScript 对象,而无需为如何表示这些对象多费心思.XML 也可以提供文本方面的类似益处,但用于将 JavaScript 对象转换成 XML 的几个现有 API 没有 JSON API 成熟:有时

Ajax提高篇(3)在请求和响应中使用 XML(1)

XML 是编程中最常用的数据格式之一,对于异步应用程序中的服务器响应能够带来切实的好处.在Ajax中也不例外. Ajax 应用程序就表现在其核心对象所选的名称 -- XMLHttpRequest,这个名称不是很好,因为它并没有反映技术上的实际情况.换句话说,多数人之所以认为 XML 是 Ajax 的核心组成部分,仅仅是因为他们想当然地以为 XMLHttpRequest 对象在任何时候都使用 XML.但实情并非如此,本文第一部分给出了原因.实际上,您将看到在多数 Ajax 应用程序中 XML 很少

Ajax提高篇(4)在请求和响应中使用 XML(2)

----前言 在 Ajax 应用程序中,使用 XML 作为发送数据的格式的理由很少,但使服务器向 客户机回发 XML 的理由很多. 理由:(1)客户机以名称/值对发送请求(2)服务器无法(以一种标准方式)发送名称/值对 在大多数情况下,客户机不需要使用 XML,因为他们会使用名称/值对发送请求.因此,您可能会发送一个这样的名称:name=jennifer.只需简单地在连续的名称/值对之间添加一个 "与" 符号(&),即可将其放在一起,就像这样:name=jennifer&

Ajax提高篇(7)Ajax实现简单的下拉框联动显示数据

页面中的两个下拉列表框: <tr> <td style="width: 130px"> 所在学院:</td> <td style="width: 100px"> <select id="college" style="width: 200px" runat="server" onchange="changcollege(this.value)&

Ajax提高篇(1)入门

学习目的:理解 Ajax 及其工作原理,构建网站的一种有效方法. Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 下面是 Ajax 应用程序所用到的基本技术:? HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段. ? JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信. ? DHTML 或 Dynamic HTML,用于动态更新表单.我们将使用 div.span 和其他动态

Spring boot 提高篇

Spring boot 提高篇 上篇文章介绍了Spring boot初级教程:构建微服务:Spring boot 入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明. github博文地址,阅读更佳 web开发 spring boot web开发

jquery序列化form表单使用ajax提交后处理返回的json数据

这篇文章主要介绍了jquery序列化form表单,使用ajax提交后处理返回的json数据的示例,需要的朋友可以参考下 1.返回json字符串: ** 将一个字符串输出到浏览器 */    protected void writeJson(String json) {        PrintWriter pw = null;        try {            servletResponse.setContentType("text/plain;charset=UTF-8"

使用JSON进行数据传输的总结

一.选择的意义 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.为了更好的使用ajax, 我们将学习一种有用的数据格式 JavaScript Object Notation (JSON ),以及如何使用它更轻松地在应用程序中移动数据和对象.JSON 是一种简单的数据交换格式,在某些方面,它的作用与XML 非常类似,但比XML 更为简单,JSON 的语法简化了数据交换的难度,而且提供了一种 伪对象 的方式. Java 的对象 < - >JavaScript 对象(js

图片上传并回显Ajax异步篇

图片上传并回显Ajax异步篇 图片如何无刷新的上传到服务器呢?继前两篇文章后,我们来实战一下如何无刷新的异步上传图片,我们还是先看一下效果 在实战前呢,我们需要做些准备工作.比如说,了解一下FormData对象 "FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据.其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用.如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()用来