打开请求
有了要连接的
URL
后就可以配置请求了。可以用
XMLHttpRequest
对象的
open()
方法来完成。该方法有五个参数:
·request-type
:发送请求的类型。典型的值是
GET
或
POST
,但也可以发送
HEAD
请求。
·url
:要连接的
URL
。
·asynch
:如果希望使用异步连接则为
true
,否则为
false
。该参数是可选的,默认为
true
。
·username
:如果需要身份验证,则可以在此指定用户名。该可选参数没有默认值。
·password
:如果需要身份验证,则可以在此指定口令。该可选参数没有默认值。
通常使用其中的前三个参数。事实上,即使需要异步连接,也应该指定第三个参数为
“true”
。这是默认值,但坚持明确指定请求是异步的还是同步的更容易理解。
将这些结合起来,通常会得到
下列所示的一行代码。
代码
4 getCustomerInfo()
方法的改进:
function getCustomerInfo() {
var phone = document.getElementById("phone").value;
var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);
request.open("GET", url, true);
}
open()
是打开吗?
我们对 open()
方法到底做什么没有达成一致。但它实际上并不是 打开一个请求。如果监控 XHTML/Ajax
页面及其连接脚本之间的网络和数据传递,当调用 open()
方法时将看不到任何通信。
一旦设置好了 URL
,其他就简单了。多数请求使用 GET
就够了,再加上 URL
,这就是使用 open()
方法需要的全部内容了。
发送请求
一旦用
open()
配置好之后,就可以发送请求了。幸运的是,发送请求的方法的名称要比
open()
适当,它就是
send()
。
send()
只有一个参数,就是要发送的内容。但是在考虑这个方法之前,回想一下前面已经通过
URL
本身发送过数据了:
var url = "/cgi-local/lookupCustomer.jsp?phone=" + escape(phone);
虽然可以使用
send()
发送数据,但也能通过
URL
本身发送数据。事实上,
GET
请求(在典型的
Ajax
应用中大约占
80%
)中,用
URL
发送数据要容易得多。如果需要发送安全信息或
XML
,可能要考虑使用
send()
发送内容(关于如何使用POST方式安全的发送数据,请参考我的另外一篇文章--POST方式发送ajax请求详解
)。如果不需要通过
send()
传递数据,则只要传递
null
作为该方法的参数即可。
代码
5
getCustomerInfo()
方法的进一步改进:
function getCustomerInfo() {
var phone = document.getElementById("phone").value;
var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);
request.open("GET", url, true);
request.send(null);
}
指定回调方法
现在我们所做的只有很少一点是新的、革命性的或异步的。必须承认,
open()
方法中
“true”
这个小小的关键字建立了异步请求。但是
Ajax
和
Web 2.0
最大的秘密是什么呢?秘密就在于
XMLHttpRequest
的一个简单属性
onreadystatechange
。
首先一定要理解这些代码中的流程(如果需要请回顾
代码
5
)。建立其请求然后发出请求。此外,因为是异步请求,所以
JavaScript
方法(例子中的
getCustomerInfo()
)不会等待服务器。因此代码将继续执行,就是说,将退出该方法而把控制返回给表单。用户可以继续输入信息,应用程序不会等待服务器。
这就提出了一个有趣的问题:服务器完成了请求之后会发生什么?答案是什么也不发生,至少对现在的代码而言如此!显然这样不行,因此服务器在完成通过
XMLHttpRequest
发送给它的请求处理之后需要某种指示说明怎么做。
现在
onreadystatechange
属性该登场了。该属性允许指定一个回调函数。回调允许服务器(猜得到吗?)反向调用
Web
页面中的代码。它也给了服务器一定程度的控制权,当服务器完成请求之后,会查看
XMLHttpRequest
对象,特别是
onreadystatechange
属性。然后调用该属性指定的任何方法。之所以称为回调是因为服务器向网页发起调用,无论网页本身在做什么。比方说,可能在用户坐在椅子上手没有碰键盘的时候调用该方法,但是也可能在用户输入、移动鼠标、滚动屏幕或者点击按钮时调用该方法。它并不关心用户在做什么。
这就是称之为异步的原因:用户在一层上操作表单,而在另一层上服务器响应请求并触发
onreadystatechange
属性指定的回调方法。
在
JavaScript
中引用函数
JavaScript
是一种弱类型的语言,可以用变量引用任何东西。因此如果声明了一个函数
updatePage()
,
JavaScript
也将该函数名看作是一个变量。换句话说,可用变量名
updatePage
在代码中引用函数。
代码
6.
设置回调方法
function getCustomerInfo() {
var phone = document.getElementById("phone").value;
var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);
}
需要特别注意的是该属性在代码中设置的位置
——
它是在调用
send()
之前
设置的。发送请求之前必须设置该属性,这样服务器在回答完成请求之后才能查看该属性。
现在剩下的就只有编写
updatePage()
方法了。
代码
7.
检查就绪状态
function updatePage() {
if (request.readyState == 4)
if (request.status == 200)
alert("Server is done!");
}
其中
request.readyState
是
HTTP
的就绪状态,在这里我们大概需要了解这
5
种状态,关于其详细意义,我们在这就不在做深入研究了。
request.readyState == 0
:请求没有发出(在调用
open()
之前)。
request.readyState == 1
:请求已经建立但还没有发出(调用
send()
之前)。
request.readyState == 2
:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
request.readyState ==3
:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。
request.readyState == 4
:响应已完成,可以访问服务器响应并使用它。
而接下来的
request.status
为
HTTP
状态码,为
200
的时候为正常,
400
多的时候为客户端的错误,
500
多的时候为服务器端的服务,如果您对这方面的知识感兴趣,不妨可以去借一些
HTTP
协议之类的书看看,这里也不做深入研究了。
l
读取响应文本
当我们成功做完上面的一切时,服务器最后给出了处理的响应,我们可以把响应的内容
以
responseText
或者
responseXML
形式组织返回给客户端供其调用。
responseXML
的话,要涉及到对
XML
的操作,因为
jdk
本身对
XML
的操作比较弱,不过我们可以运用第三方的包
org.jdom
(网上有的下载),如果大家有兴趣,可以自己去研究,这里我们简单的给出一个
responseXML
的用法的例子
代码
8. responseText
的简单运用
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200) {
var response = request.responseText.split("|");
document.getElementById("order").value = response[0];
document.getElementById("address").innerHTML = response[1].replace(/\n/g, "");
} else
alert("status is " + request.status);
}
}
到现在,相信大家一定对
Ajax
有了一个系统的了解了吧,仅仅只是讲了
Ajax
的一些最基础的东西,如果您对这个有兴趣,还可以进行进一步的深入研究。
l
Ajax
应用场景
然而
Ajax
不是万能的,在适合的场合使用
Ajax
,才能充分发挥它的长处,改善系统性能和用户体验,绝不可以为了技术而滥用。
Ajax
的特点在于异步交互,动态更新
web
页面,因此它的适用范围是交互较多,频繁读取数据的
web
应用。现在来看几个
Ajax
的应用实例,读者可以了解如何使用
Ajax
技术改进现有的
web
应用系统。
场景
1.
数据验证
在填写表单内容时,需要保证数据的唯一性(例如新用户注册填写的用户名),因此必须对用户输入的内容进行数据验证。数据验证通常有两种方式:一种是直接填写,然后提交表单,这种方式需要将这个页面提交到服务器端进行验证,整个过程不仅时间长而且造成了服务器不必要的负担;第二种方式是改进了的验证过程,用户可以通过点击相应的验证按钮,打开新窗口查看验证结果,但是这样需要新开一个浏览器窗口或者对话框,还需要专门编写验证的页面,比较耗费系统资源。而使用
Ajax
技术,可以由
XMLHttpRequest
对象发出验证请求,根据返回的
HTTP
响应判断验证是否成功,整个过程不需要弹出新窗口,也不需要将整个页面提交到服务器,快速而又不加重服务器负担。
场景
2.
按需取数据
分类树或者树形结构在
web
应用系统中使用得非常广泛,例如部门结构,文档得分类结构常常使用树形空间呈现。以前每次对分类树得操作都会引起页面重载,为了避免这种情况出现,一般不采用每次调用后台得方式,而是一次性将分类结果中得数据一次性读取出来并写入数组,然后根据用户的操作,用
JavaScript
来控制节点的呈现,这样虽然解决了操作响应速度,不重复载入页面以及避免向服务器频繁发送请求的问题,但是如果用户不对分类进行操作或者只对分类树中的一部分数据进行操作的话(这种情况很普遍的),那么读取的数据中就会有相当大的冗余,浪费了用户的资源。特别是在分类结构复杂,数据庞大的情况下,这种弊端就更加明显了。
现在应用
Ajax
改进分类树的实现机制。在初始化页面时,只获取第一级子分类的数据并且显示;当用户点开一级分类的第一节点时,页面会通过
Ajax
向服务器请求当前分类所属的二级子分类的所有数据;如果再请求已经呈现的二级分类的某一节点时,再次向服务器请求当前分类所属的三级子分类的所有数据,以此类推。页面会根据用户的操作向服务器请求它所需要的数据,这样就不会存在数据的冗余,减少了数据下载总量。同时,更新页面时不需要重载所有内容,只更新需要更新的那部分内容即可,相对于以前后台处理并且重载的方式,大大缩短了用户的等待时间。
场景
3.
自动更新页面
在
web
应用中有很多数据的变化时十分迅速的,例如最新的热点新闻,天气预报以及聊天室内容等。在
Ajax
出现之前,用户为了即使了解相应的内容必须不断刷新页面,查看是否有新的内容变化,或者页面本身实现定时刷新的功能(大多数聊天室页面就是这样做的)。有可能会发生这种情况;有一段时间网页的内容没有发生任何变化,但是用户并不知道,仍然不断的刷新页面;或者用户失去了耐心,放弃了刷新页面,却很有可能在此有新的消息出现,这样就错过了第一时间得到消息的机会。
应用
Ajax
可以改善这种这种情况,页面加载以后,会通过
Ajax
引擎在后台进行定时的轮询,向服务器发送请求,查看是否有最新的消息。如果有则将新的数据(而不是所有数据)下载并且在页面上进行动态的更新,通过一定的方式通知用户(实现这样的功能正是
JavaScript
的强项)。这样即避免了用户不断手工刷新页面的不便,也不会因为重复刷新页面造成资源浪费。
l
结束语
完成了,真是累死了,经过大量的翻阅
ajax
方面的书籍以及网上的一些博文,花了几个礼拜的时间终于整理写成了这篇文章,但是这里仅仅只是讲了一点
Ajax
方面的基础,真正要灵活的运用
Ajax
,我们还必须熟练的掌握
XML
,
javascript
,
DOM
等许多技术,因此我希望对
Ajax
有兴趣的朋友一同加入到探索研究
Ajax
队伍行列中,使
Ajax
的明天更加繁荣强大。
分享到:
相关推荐
**Ajax经典入门详解** Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它使得网页可以在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。Ajax的核心是利用JavaScript和...
**Ajax 入门详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的出现极大地提升了用户体验,因为它允许网页在后台与服务器进行数据交换,而...
二、ScriptManager控件 ScriptManager是ASP.NET AJAX中的关键组件,它负责引入必要的JavaScript库,并管理页面上的AJAX功能。它需要放置在每个使用ASP.NET AJAX的页面的顶部,以便为整个页面启用AJAX支持。 三、...
本书介绍了ASP.NETAJAX框架的基础知识,包括AJAX的入门知识、JavaSeript和CSS等,重点介绍了ASP.NETAJAX的各控件以及ASP.NETAJAX控件工具箱的使用方法,并以作者开发的博客和BBS系统两个完整的案例,详细介绍了...
**Ajax经典入门案例详解** Ajax,全称异步JavaScript和XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,提升了用户体验。在Web...
**Ajax 简介** Ajax,全称为"Asynchronous JavaScript and XML",是一种在无需刷新整个网页的情况下,能够更新部分网页内容的技术。它并不是一项全新的技术,而是由一系列成熟的技术组合而成,包括JavaScript、DOM...
本书《ASP.NET AJAX 入门与案例详解》是针对初学者和有一定基础的开发者设计的,旨在帮助读者快速掌握这一技术。 首先,ASP.NET AJAX的核心组件包括AJAX Control Toolkit、UpdatePanel、ScriptManager和Web ...
**Ajax 入门实例详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的核心在于利用JavaScript创建XMLHttpRequest对象,通过这个对象与服务器...
《ASP.NET 2.0 AJAX入门经典》这本书很可能包含了多个示例,演示如何使用AJAX技术来增强ASP.NET 2.0应用程序的交互性。这些实例可能涵盖用户界面改进、数据异步加载、实时验证等多个场景,帮助读者掌握实际开发技巧...
### AJAX入门知识点详解 #### 一、引言 AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换来实现这一点,从而为用户...
**Ajax入门与案例详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的出现极大地提升了用户体验,因为它允许网页在后台与服务器进行数据...
达内培训集团的CTO写的 ajax详解 适合入门学习的
本书介绍了ASP.NETAJAX框架的基础知识,包括AJAX的入门知识、JavaSeript和CSS等,重点介绍了ASP.NETAJAX的各控件以及ASP.NETAJAX控件工具箱的使用方法,并以作者开发的博客和BBS系统两个完整的案例,详细介绍了...
**Ajax入门视频教程详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术使得Web应用程序能够更快、更高效地运行,提升了用户体验,因为它允许...
这个经典AJAX简单入门篇包含了DOM(Document Object Model)的详解,是初学者掌握AJAX技术的重要资源。 **一、AJAX基本概念** AJAX的核心是通过XMLHttpRequest对象来与服务器进行异步数据交换,它允许网页在不重新...
Ajax,即Asynchronous JavaScript and XML,是一种用于创建交互式网页应用的技术,允许页面在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。它显著提升了用户体验,减少了网络延迟带来的等待...
**Ajax入门提高资料详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的运用极大地提升了用户体验,因为它允许网页在后台与服务器进行数据...
**Ajax入门实例——用户注册详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,大大...
本书介绍了ASP.NETAJAX框架的基础知识,包括AJAX的入门知识、JavaSeript和CSS等,重点介绍了ASP.NETAJAX的各控件以及ASP.NETAJAX控件工具箱的使用方法,并以作者开发的博客和BBS系统两个完整的案例,详细介绍了...