跳到主要内容

AJAX

是 Asynchronous JavaScript and XML 的缩写,中文译作异步 JavaScript 和 XML 。 AJAX 不是一门新的语言,而是将 JavaScript 、 XML 和异步执行这 3 项技术综合运用的一个解决方案,包含以下几个主要内容点(前两项内容就是 DHTML 实现的功能):

  • 运用 HTML+CSS 来表达信息
  • 运用 JavaScript 操作 DOM 实现动态效果
  • 运用 XML 、 JSON 等进行数据交换
  • 运用 XMLHttpRequest 与 Web 服务器进行异步数据交换

AJAX 的核心是客户端的 JavaScript 程序能够与 Web 服务器进行异步数据交换,也就是实现异步执行。

异步执行中有一个非常特殊的功能,那就是回调( callback )。

AJAX 是 Asynchronous JavaScript and XML 的缩写,意思是异步的 JavaScript 和 XML 。 AJAX 并不是一门新的语言或技术,它是 JavaScript 、 XML 、 CSS 、 DOM 等多种已有技术的组合,可以实现客户端的异步请求操作,从而实现在不需要刷新页面的情况下与服务器进行通信,减少了用户的等待时间,减轻了服务器和带宽的负担,提供更好的服务响应。

AJAX 开发模式与传统开发模式的比较

传统的 Web 应用模式中,页面中用户的每一次操作都将触发一次返回 Web 服务器的 HTTP 请求,服务器进行相应的处理(获得数据、运行与不同的系统会话)后,返回一个 HTML 页面给客户端。

而在 AJAX 应用中,页面中用户的操作将通过 AJAX 引擎与服务器端进行通信,然后将返回结果提交给客户端页面的 AJAX 引擎,再由 AJAX 引擎来决定将这些数据插入页面的指定位置。

AJAX 技术特点

与传统的 Web 应用不同, AJAX 在用户与服务器之间引入一个中间媒介( AJAX 引擎),从而消除了网络交互过程中的处理- 等待- 处理-等待的缺点,从而大大改善了网站的视觉效果。

可以把一部分以前由服务器负担的工作转移到客户端,利用客户端闲置的资源进行处理,减轻服务器和带宽的负担,节约空间和成本。

无刷新更新页面,从而使用户不用再像以前一样在服务器处理数据时,只能在死板的白屏前焦急地等待。 AJAX 使用 XMLHttpRequest 对象发送请求并得到服务器响应,在不需要重新载入整个页面的情况下,就可以通过 DOM 及时将更新的内容显示在页面上。

可以调用 XML 等外部数据,进一步促进页面显示和数据的分离。

基于标准化的并被广泛支持的技术,不需要下载插件或者小程序,即可轻松实现桌面应用程序的效果。

AJAX 没有平台限制。 AJAX 把服务器的角色由原本传输内容转变为传输数据,而数据格式则可以是纯文本格式和 XML 格式,这两种格式没有平台限制。

同其它事物一样, AJAX 也不尽是优点,它也有一些缺点,具体表现在以下几个方面:

  • 大量的 JavaScript ,不易维护
  • 可视化设计上比较困难
  • 打破"页"的概念
  • 给搜索引擎带来困难

AJAX 使用的技术

AJAX 是 XMLHttpRequest 对象和 JavaScript 、 XML 、 CSS 、 DOM 等多种技术的组合。其中,只有 XMLHttpRequest 对象是新技术,其它的均为已有技术。

XMLHttpRequest 对象

AJAX 使用的技术中,最核心的技术就是 XMLHttpRequest 。它是一个具有应用程序接口的 JavaScript 对象,能够使用超文本传输协议( HTTP )连接一个服务器,是微软公司为了满足开发者的需要,于 1999 年在 IE 5.0 浏览器中率先推出的。现在许多浏览器都对其提供了支持,不过实现方式与 IE 有所不同。

安全问题

JavaScript 本身的安全性

虽然 JavaScript 的安全性已逐步提高,提供了很多受限功能,包括访问浏览器的历史记录、上传文件、改变菜单栏等。但是,当在 Web 浏览器中执行 JavaScript 代码时,用户允许任何人编写的代码运行在自己的机器上,这就为移动代码自动跨越网络来运行提供了方便条件,从而给网站带来了安全隐患。为了解决这一潜在的危险,浏览器厂商在一个 sandbox (沙箱)中执行 JavaScript 代码。沙箱是一个只能访问很少计算机资源的密闭环境,从而使 AJAX 应用不能读取或写入本地文件系统。虽然这会给程序开发带来困难,但是它提高了客户端 JavaScript 的安全性。

数据在网络上传输的安全问题

当采用普通的 HTTP 请求时,请求参数的所有的代码都是以明码的方式在网络上传输的。对于一些不太重要的数据,采用普通的 HTTP 请求即可满足要求,但是如果涉及特别机密的信息,这样做则是不行的,因为某些恶意的路由可能读取传输的内容。为了保证 HTTP 传输数据的安全,可以对传输的数据进行加密,这样即使被看到,危险也是不大的。虽然对传输的数据进行加密,可能会对服务器的性有所降低,但对于敏感数据,以性能换取更高的安全,还是值得的。

客户端调用远程服务的安全问题

虽然 AJAX 允许客户端完成部分服务器的工作,并可以通过 JavaScript 来检查用户的权限,但是通过客户端脚本控制权限并不可取,因为一些解密高手可以轻松绕过 JavaScript 的权限检查,直接访问业务逻辑组件,从而对网站造成威胁。通常情况下,在 AJAX 应用中,应该将所有的 AJAX 请求都发送到控制器,由控制器负责检查调用者是否有访问资源的权限。

性能问题

由于 AJAX 将大量的计算从服务器移到了客户端,这就意味着浏览器将承受更大的负担,而不再是只负责简单的文档显示。由于 AJAX 的核心语言是 JavaScript ,而 JavaScript 并不以高性能知名,另外, JavaScript 对象也不是轻量级的,特别是 DOM 元素耗费了大量的内存,因此,如何提高 JavaScript 代码的性能,对于 AJAX 开发者来说尤为重要。下面介绍几种优化 AJAX 应用执行速度的方法。

  • 尽量使用局部变量,而不使用全局变量
  • 优化 for 循环
  • 尽量少用 eval ,每使用 eval 都需要消耗大量的时间
  • 将 DOM 节点附加到文档上
  • 尽量减少点". "号操作符的使用

浏览器兼容性问题

AJAX 使用了大量的 JavaScript 和 AJAX 引擎,而这些内容需要浏览器提供足够的支持。目前提供这些支持的浏览器主要分为两大类:一类是 IE 浏览器,在 IE 浏览器中,只有 IE 5.0 及以上版本才支持;另一类是非 IE 浏览器,如 Firefox 、 Mozilla 1.0 、 Safari 1.2 及以上版本。虽然 IE 浏览器和非 IE 浏览器都支持 AJAX ,但是它们提供的创建 XMLHttpRequest 对象的方式不一样,所以使用 AJAX 的程序必须测试针对各个浏览器的兼容性。

解决中文乱码问题

AJAX 不支持多种字符集,它默认的字符集是 UTF-8 ,所以在应用 AJAX 技术的程序中应及时进行编码转换,否则程序中出现的中文字符将变成乱码。一般情况下,有以下两种情况会产生中文乱码。

PHP 发送中文、 AJAX 接收只需在 PHP 顶部添加如下语句。

<span class="p"
>header("Content-type:text/html;charset=GB2312");// 指定发送数据的编码格式

XMLHttp 会正确解析其中的中文。

AJAX 发送中文、 PHP 接收这个比较复杂, AJAX 中先用 encodeURIComponent 对要提交的中文进行编码,在 PHP 页添加如下代码。