在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。Ajax 的另一种有用的数据格式 JavaScript Object Notation(JSON),使用它更轻松地在应用程序中移动数据和对象。
在许多异步应用程序中如何恰当地使用纯文本和简单的名称/值对。可以将数据组合成下面这样的形式:
mailto:firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com
这样就行了,不需要再做什么了。实际上,Web 老手会意识到通过 GET 请求发送的信息就是采用这种格式。 如果使用 XML 数据格式,就可以将数据组合成下面的形式:
<request> <firstName>Brett</firstName> <lastName>McLaughlin</lastName> <email>brett@newInstance.com</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": "brett@newInstance.com" }
从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号
使这些值有了某种联系。
(2)值的数组: 当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。 如果使用 JSON,就只需将多个带花括号的记录分组在一起:
- {"people":[
- {"firstName":"Brett","email":"brett@newInstance.com"},
- {"firstName":"Jason","lastName":"Hunter","email":"jason@servlets.com"},
- {"firstName":"Elliotte","lastName":"Harold","email":"elharo@macfaq.com"}
- ]}
2.在 JavaScript 中使用 JSON: (1)将 JSON 数据赋值给变量 例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:
varpeople=
- {"programmers":[
- {"firstName":"Brett",248)"> {"firstName":"Jason",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> {"firstName":"Elliotte","email":"elharo@macfaq.com"}
- ],108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "authors":[
- {"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> {"firstName":"Tad","lastName":"Williams","genre":"fantasy"},248)"> {"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
- ],248)"> "musicians":[
- {"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},248)"> {"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 对象和语法。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|