Ajax
firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com
GET请求发送的信息就是采用这种格式。
Ajax:
<request> <firstName>Brett</firstName> <lastName>McLaughlin</lastName> <email>brett@newInstance.com</email> </request>
XML
本文讨论另一种数据格式,JavaScript Object Notation(JSON)。JSON看起来既熟悉又陌生。它提供了另一种选择,选择范围更大总是好事情。
添加 JSON
XML
Web表单的数据,并将数据转换为一种适合发送给服务器端程序的格式。
JavaScript
JavaScript
XML,就有点儿多此一举
了。这时就合适使用
JavaScript对象转换成可以随请求发送的数据(同步或异步都可以)。
JSON并不是某种魔弹;但是,它对于某些非常特殊的情况是很好的选择。
JSON基础
JavaScript
JavaScript
{ "firstName": "Brett" }
firstName=Brett
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }
JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
值的数组
XMLperson1-firstName这样的形式。
{ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ]}
这不难理解。在这个示例中,只有一个名为people
的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{ "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ], "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" } ] }
musicians
JSON结构的中间改变表示数据的方式。
在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
JSON
JavaScript
JavaScript
JSON
JSON格式的数据字符串直接赋值给它:
var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ], "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
访问数据
programmers
people.programmers[0].lastName;
注意,数组索引是从零开始的。所以,这行代码首先访问people
变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问lastName
键的值。结果是字符串值
“McLaughlin”。
下面是使用同一变量的几个示例。