一、前言
本文将探讨Ajax(Asynchronous JavaScript and XML)这一传统Web技术。在以前,Ajax出现后,便改变了Web应用程序的开发方式,为用户提供了更快速和更无缝的体验。在本文中,我们将介绍Ajax的基本原理、使用流程以及一个简单的应用示例,帮助你更好地理解这项技术。
二、内容
2.1 概述
(1)简介
Ajax ,即Asynchronous JavaScript and XML(异步JavaScript和XML),是一项革命性的Web技术,它改变了Web应用程序的开发方式和用户体验。这个术语由Jesse James Garrett于2005年提出,用来描述一种全新的方法,将现有技术如HTML
、CSS
、JavaScript
、DOM
、XML
、XSLT
以及最关键的XMLHttpRequest
结合在一起,从而实现了Web应用程序的快速响应和无需整页刷新的增量更新。
总的来说,Ajax不是新的技术,它最大的特点就是可以在不刷新页面的前提下,进行页面局部更新。
(2)基本原理
Ajax的关键在于其异步通信机制,允许Web应用程序通过JavaScript向服务器发送请求,处理响应,而不会阻塞用户的操作。
这一机制主要依赖于XMLHttpRequest
对象,它使得浏览器与Web服务器之间的数据传输成为可能。通过Ajax,Web应用程序能够向服务器请求仅需的数据,而不必重新加载整个页面,从而实现了快速局部刷新的效果。这一特性使因特网应用程序变得更小、更快、更友好,为用户提供了更出色的体验。
"尽管 Ajax 中的 X 代表 XML,但是JSON才是首选,因为它更加轻量,而且是用 JavaScript 编写的。在 Ajax 模型中,JSON 和 XML 都被用来包装信息。"
(3)应用发展
Ajax 技术的应用可追溯到1998年左右,当时Outlook Web Access小组首次实现了可以发送HTTP请求的客户端脚本(XMLHTTP),这一组件后来成为了Internet Explorer 4.0的一部分。然而,Ajax 真正受到广泛认可是在2005年,当Google开始在其应用程序中使用异步通信,如Google搜索、Google地图和Gmail等。Ajax 这个词汇由一篇名为 《Ajax: A New Approach to Web Applications》 的文章传播,加强了人们对这项技术的认识。Mozilla/Gecko 浏览器的支持也推动了Ajax技术的成熟和普及,使其更易用。
Ajax 开发与传统的B/S(浏览器/服务器)开发有着明显的区别,引入了新的编程问题,特别是在用户界面的易用性方面。开发人员必须理解传统的MVC(模型-视图-控制器)架构,并将其应用于Ajax 开发中。这需要开发人员将UI设计和服务架构之间的界限明确划分,以便更好地使用这一技术。同时,Ajax开发人员需要考虑网络延迟、错误处理、回调等问题,以提供出色的用户体验。
2.2 使用流程
Ajax的使用流程通常包括以下步骤:
- 创建
XmlHttpReqeust
对象 - 发送
Ajax
请求 - 处理服务器响应
具体记录如下。
(1)创建XmlHttpRequest对象
首先,我们需要创建一个XmlHttpRequest
对象,这个对象充当了与服务器通信的媒介,用于在后台与服务器交换数据。
这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
在JavaScript
中,可以使用以下代码创建XmlHttpRequest
对象:
javascript
var xhr = new XMLHttpRequest();
或者在较老的IE浏览器中,则需要改为ActiveXObject
对象,可以使用:
javascript
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
这个对象会被用于发送请求并接收来自服务器的响应。
如果我们需要混合在一起写,那么可以:
javascript
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
通过检测
window
对象是否有XMLHttpRequest
属性来确定浏览器是否支持标准的XMLHttpRequest
。
(2)发送Ajax请求
一旦我们创建了XmlHttpRequest对象,接下来需要使用它来发送Ajax请求。通常,这涉及到设置请求的方法(GET或POST)、URL(服务器端的资源地址)、是否使用异步(true或false)等参数,然后发送请求。
例如:
javascript
xhr.open("GET", "https://example.com/api/data", true); // 创建请求
xhr.send(); // 发送到服务器
上述代码示例中,我们使用GET方法请求了一个URL,并启用了异步模式。
我们来看一下这两个方法:
- open()方法:open()方法规定请求的类型(GET或POST)、URL以及请求是否异步处理。异步处理通常设置为true,以确保JavaScript不会等待服务器响应。
- send()方法:send()方法将请求发送到服务器。对于POST请求,您可以在send()方法中传递数据。
Ajax支持两种常见的HTTP请求类型:GET和POST。
GET请求通常用于获取服务器上的资源。在GET请求中,数据附加在URL中,这使得它更简单和更快。
POST请求 通常用于向服务器发送大量数据或包含未知字符的用户输入。在POST请求中,我们可以使用
setRequestHeader()
方法设置HTTP头,然后在send()
方法中传递数据。另外,我们来看一下异步数据交换特性。
Ajax中的"A"代表"异步",这是其关键特性之一。通过异步请求,JavaScript可以在等待服务器响应的同时执行其他任务,而不会使应用程序挂起或停止。对于长时间运行的服务器任务来说,这是一项巨大的进步。
(3)处理服务器响应
最后一步,当服务器收到请求并处理后,它会返回一个响应。此时我们需要设置一个回调函数,以便在服务器响应后执行相应的操作。这通常包括处理从服务器返回的数据,更新页面内容或执行其他操作。
对于处理服务器响应,我们需要了解onreadystatechange
事件。xmlhttp.onreadystatechange
事件是用于监听AJAX
的执行过程的关键。它在XMLHttpRequest
对象的状态发生变化时触发,允许我们执行特定的操作。通常我们会在这个事件中处理响应数据。
示例:
javascript
xhr.onreadystatechange = function() {
// 响应已被接收且服务器处理成功时才执行
if (xhr.readyState === 4 && xhr.status === 200) {
// 获取响应体的文本
var response = xhr.responseText;
// 执行其他操作
// 比如:
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
};
在这个示例中:
xmlhttp.readyState
属性表示XMLHttpRequest
对象的当前状态,其中4表示请求已完成,且响应已准备就绪。xmlhttp.status
属性表示服务器响应的状态码,通常200表示成功,404表示未找到资源等。
当我们确保请求已成功完成,就可以处理响应数据
readyState
值说明 readyState = 0 请求未初始化 readyState = 1 服务器连接已建立 readyState = 2 请求已被接收 readyState = 3 请求正在处理 readyState = 4 响应文本已被接收(常用)
responseText
属性用于获取来自服务器的响应数据的字符串形式。这对于获取文本响应非常有用。
2.3 应用示例
下面,我们写一个简单的示例,用于演示Ajax的使用。
(1)编写 Java Bean
首先,让我们看一下JavaBean News类。这个类用于表示新闻信息,包括标题、日期、来源和内容。这是一个典型的JavaBean,它提供了私有属性和公有的getter和setter方法,用于创建和访问新闻对象的属性,以便于新闻信息的访问和修改。
这个类的作用是创建News对象,用于存储新闻的各个属性。
(2) 编写Servlet类
接下来,我们来看Java Servlet类(NewsListServlet
),它是处理Ajax请求的关键,它响应前端的GET请求并提供新闻数据。
这个Servlet处理GET请求,首先创建一个News对象的列表,并向列表中添加硬编码的新闻数据。接着,使用FastJSON
库将新闻列表转换为JSON字符串。最后,将JSON数据作为响应返回给前端页面。
(3)编写news_list.html页面
最后,让我们看一下HTML页面,这是前端页面,用于展示从Servlet获取的新闻数据。页面中使用了JavaScript来实现Ajax请求和处理响应。
在这个HTML页面中,我们首先创建了一个<div>
元素,用于容纳新闻内容,并赋予它一个id为"container"
。接着,使用JavaScript进行以下操作:
- 创建一个
XMLHttpRequest
对象,该对象用于与服务器进行异步通信。这是Ajax的核心部分。 - 发送一个GET请求到
"/example/newsList"
,即NewsListServlet
的URL,以获取新闻数据。 - 设置一个回调函数
xmlhttp.onreadystatechange
,该函数在响应返回后被调用。在回调函数中,我们检查HTTP响应的状态和准备状态。当readyState
为4(表示请求已完成)且status
为200(表示成功)时,解析JSON响应并将新闻信息插入到页面的"container"中。
这个项目演示了如何使用Ajax技术从Java Servlet
获取数据,然后将数据呈现在前端网页上。在实际应用中,你可以将News
类和NewsListServlet
类扩展以连接到实际的数据源,例如数据库,以实现动态加载内容。
(4)最终效果
三、总结
总的来说,Ajax的基本原理依赖于XMLHttpRequest
对象,它允许浏览器与Web服务器之间的数据传输,使Web应用程序能够仅请求需要的数据,而不必重新加载整个页面。Ajax的使用流程包括创建XMLHttpRequest
对象、发送Ajax请求以及处理服务器响应。通过设置回调函数,可以在服务器响应后执行相应的操作,从而实现动态更新页面内容。