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

JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值之间得以快速转换。由于 Ajax 应用程序非常适合将纯文本发送给服务器端程序并对应地接收纯文本,相比不能生成文本的 API,能生成文本的 API 自然更可取;而且,JSON 让您能够处理本地 JavaScript 对象,而无需为如何表示这些对象多费心思。
XML 也可以提供文本方面的类似益处,但用于将 JavaScript 对象转换成 XML 的几个现有 API 没有 JSON API 成熟;有时,您必须在创建和处理 JavaScript 对象时格外谨慎以确保所进行的处理能与所选用的 XML 会话 API 协作。但对于 JSON,情况就大不相同:它能处理几乎所有可能的对象类型,并会返回给您一个非常好的 JSON 数据表示。
因此,JSON 的最大价值在于可以将 JavaScript 真的作为 JavaScript 而非数据格式语言进行处理。您所学到的所有有关使用 JavaScript 对象的技巧都可以应用到代码中,而无需为如何将这些对象转变成文本而多费心思。这之后,可以进行如下所示的简单 JSON 方法调用:

String myObjectInJSON = myObject.toJSONString();

现在就可以将结果文本发送给服务器了。

*将 JSON 发给服务器
----通过 GET 以名称/值对发送 JSON

将 JSON 数据发给服务器的最简单方法是将其转换成文本,然后以名称/值对的值的方式进行发送。请务必注意,JSON 格式的数据是相当长的一个对象,看起来可能会如清单 1 所示:
清单 1. JSON 格式的简单 JavaScript 对象

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" }   ]  }

如果要以名称/值对将其发送到服务器端,应该如下所示:

var url = "organizePeople.aspx?people=" + people.toJSONString();
 xmlHttp.open("GET", url, true);
 xmlHttp.onreadystatechange = updatePage;
 xmlHttp.send(null);

存在一个问题:在 JSON 数据中会有空格和各种字符,Web 浏览器往往要尝试对其继续编译。要确保这些字符不会在服务器上(或者在将数据发送给服务器的过程中)引起混乱,需要在 JavaScript escape() 函数中做如下添加:

var url = "organizePeople.aspx?people=" + escape(people.toJSONString());
 request.open("GET", url, true);
 request.onreadystatechange = updatePage;
 request.send(null);

该函数可以处理空格、斜线和其他任何可能影响浏览器的内容,并将它们转换成 Web 可用字符(比如,空格会被转换成 %20,浏览器并不会将其视为空格处理,而是不做更改,将其直接传递到服务器)。之后,服务器会(通常自动)再把它们转换回它们传输后的本来 “面目”。

这种做法的缺点有两个:
在使用 GET 请求发送大块数据时,对 URL 字符串有长度限制。虽然这个限制很宽泛,但对象的 JSON 字符串表示的长度可能超出您的想象,尤其是在使用极其复杂的对象时更是如此。
在跨网络以纯文本发送所有数据的时候,发送数据面临的不安全性超出了您的处理能力。
简言之,以上是 GET 请求的两个限制,而不是简单的两个与 JSON 数据相关的事情。在想要发送用户名和姓之外的更多内容,比如表单中的选择时,二者可能会需要多加注意。若要处理任何机密或极长的内容,可以使用 POST 请求。

----利用 POST 请求发送 JSON 数据

当决定使用 POST 请求将 JSON 数据发送给服务器时,并不需要对代码进行大量更改,如下所示:

var url = "organizePeople.php?timeStamp=" + new Date().getTime();
request.open("POST", url, true);
request.onreadystatechange = updatePage;
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(people.toJSONString());

使用 POST 而非 GET 打开,Content-Type 头被设置为让服务器预知它能得到何种数据。在这种情况下,即为 application/x-www-form-urlencoded,它让服务器知道现在发送的是文本,正如它从常规的 HTML 表单中得到的一样。
另一个简单提示是 URL 的末尾追加了时间。这就确保了请求不会在它第一次被发送后即缓存,而是会在此方法每次被调用后重新创建和重发;此 URL 会由于时间戳的不同而稍微有些不同。这种技巧常被用于确保到脚本的 POST 每次都会实际生成新请求且 Web 服务器不会尝试缓存来自服务器的响应。

*在服务器上解释 JSON
处理 JSON 的两步骤:
针对编写服务器端程序所用的语言,找到相应的 JSON 解析器/工具箱/帮助器 API。
使用 JSON 解析器/工具箱/帮助器 API 取得来自客户机的请求数据并将数据转变成脚本能理解的东西。

寻找 JSON 解析器或工具箱最好的资源是 JSON 站点(有关链接,请参阅 参考资料)。在这里,除了可以了解此格式本身的方方面面之外,还可以通过各种链接找到 JSON 的各种工具和解析器,从 ASP 到 Erlang,到 Pike,再到 Ruby,应有尽有。您只需针对自己编写脚本所用的语言下载相应的工具箱即可。为了让服务器端脚本和程序能够使用此工具箱,可以根据情况对其进行选择、扩展或安装(如果在服务器端使用的是 C#、PHP 或 Lisp,则可变性更大)。

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

时间: 2024-10-23 23:49:12

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

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

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

Ajax提高篇(1)入门

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

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

在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.Ajax 的另一种有用的数据格式 JavaScript Object Notation(JSON),使用它更轻松地在应用程序中移动数据和对象. 在许多异步应用程序中如何恰当地使用纯文本和简单的名称/值对.可以将数据组合成下面这样的形式: mailto:firstName=Brett&lastName=McLaughlin&[email protected] 这样就行了,不需要再做什么

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)&

服务器端脚本和客户端脚本

(一)脚本.脚本语言 脚本(Script)是使用一种特定描述性语言.依据一定的格式编写的可执行文件,又称作宏或批处理文件.通俗地讲,其实脚本是由一系列的bind和alias等命令的集合,如同一般的程序,脚本可以将一个值赋给一个变量,可以命令web服务器发送一个值到客户浏览器,还可以将一系列命令定义成一个过程.可以把集合存放在一个独立的文件然后需要的时候执行,方便CS使用.-----好吧,我还是没明白. 脚本语言(Scripting language):一种计算机程序语言,语法和结构以及学习和使用

ajax 基础篇

AJAX XMLHttpRequest 对象 浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObjec

【转】java提高篇(二)-----理解java的三大特性之继承

[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句话中最引人注目的是"复用代码",尽可能的复用代码使我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大

java提高篇(三十)-----Iterator

本文转载地址:            http://blog.csdn.net/chenssy/article/details/37521461 迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. [java] view plaincopyprint? Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //d