最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一。AJAX是Asynchronous JavaScript and XML 的缩写。它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括
使用XHTML和CSS标准化呈现;
使用DOM实现动态显示和交互;
使用XML和XSLT进行数据交换与处理;
使用XMLHttpRequest进行异步数据读取;
最后用JavaScript绑定和处理所有数据;
Ajax的工作原理相当于在用户和服务器之间加了?个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。
我们以两个验证通行证帐号是否存在的例子来讲述AJAX在实际中的应用:
(1) 用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在;
(2) 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在;
首先,我们需要用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求, XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。 后来Mozilla?Netscape?Safari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。
对于Internet Explorer浏览器,创建XMLHttpRequest 方法如下:
xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0, 5.0
xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");
由于在不同Internet Explorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的Internet Explorer浏览器,因此我们需要根据不同版本的Internet Explorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的Internet Explorer浏览器创建XMLHttpRequest类的方法。
对于Mozilla?Netscape?Safari等浏览器,创建XMLHttpRequest 方法如下:
xmlhttp_request = new XMLHttpRequest();
如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作。 为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header。
xmlhttp_request = new XMLHttpRequest();
xmlhttp_request.overrideMimeType('text/xml');
在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:
try{
if( window.ActiveXObject ){
for( var i = 5; i; i-- ){
try{
if( i == 2 ){
xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" );
}else{
xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
}
xmlhttp_request.setRequestHeader("Content-Type","text/xml");
xmlhttp_request.setRequestHeader("Content-Type","gb2312");
break;}
catch(e){
xmlhttp_request = false;
}
}
}else if( window.XMLHttpRequest ){
xmlhttp_request = new XMLHttpRequest();
if (xmlhttp_request.overrideMimeType) {
xmlhttp_request.overrideMimeType('text/xml');
}
}
}catch(e){
xmlhttp_request = false;
}
在定义了如何处理响应后,就要发送请求了。可以调用HTTP请求类的open()和send()方法,如下所示:
xmlhttp_request.open('GET', URL, true);
xmlhttp_request.send(null);
open()的第一个参数是HTTP请求方式?GET,POST或任何服务器所支持的您想调用的方式。 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。
第二个参数是请求页面的URL。
第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。
用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:
xmlhttp_request.onreadystatechange =FunctionName;
FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:
xmlhttp_request.onreadystatechange = function(){
// JavaScript代码段
};
在这个函数中。首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。
readyState的取值如下:
0 (未初始化)
1 (正在装载)
2 (装载完毕)
3 (交互中)
4 (完成)
所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下:
if (http_request.readyState == 4) {
// 收到完整的服务器响应
} else {
// 没有收到完整的服务器响应
}
当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。
在检查完请求的状态值和响应的HTTP状态值后,就可以处理从服务器得到的数据了。有两种方式可以得到这些数据:
(1) 以文本字符串的方式返回服务器的响应
(2) 以XMLDocument对象方式返回响应
实例一: 用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在
首先,我们登陆网易通行证注册页面,可以看到检测用户名是否存在是将用户名提交给checkssn.jsp页面进行判断,格式为:
reg.163.com/register/checkssn.jsp?username=用户名
根据上面讲到的方法,我们可以利用AJAX技术对网易通行证用户名进行检测:
第一步:新建一个基于Xhtml标准的网页,在<head>区域插入Javascript函数如下:
<script type="text/javascript" language="javascript">
function getXMLRequester( ){
var xmlhttp_request = false;
try{
if( window.ActiveXObject ){
for( var i = 5; i; i-- ){
try{
if( i == 2 ){
xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" );
}else{
xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
xmlhttp_request.setRequestHeader("Content-Type","text/xml");
xmlhttp_request.setRequestHeader("Content-Type","gb2312");
}
break;}
catch(e){
xmlhttp_request = false;
}
}
}else if( window.XMLHttpRequest ){
xmlhttp_request = new XMLHttpRequest();
if (xmlhttp_request.overrideMimeType) {
xmlhttp_request.overrideMimeType('text/xml');
}
}
}catch(e){
xmlhttp_request = false;
}
return xmlhttp_request ;
}
function IDRequest(n) {//定义收到服务器的响应后需要执行的JavaScript函数
url=n+document.getElementById('163id').value;//定义网址参数
xmlhttp_request=getXMLRequester();//调用创建XMLHttpRequest的函数
xmlhttp_request.onreadystatechange = doContents;//调用doContents函数
xmlhttp_request.open('GET', url, true);
xmlhttp_request.send(null);
}
function doContents() {
if (xmlhttp_request.readyState == 4) {// 收到完整的服务器响应
if (xmlhttp_request.status == 200) {//HTTP服务器响应的值OK
document.getElementById('message').innerHTML = xmlhttp_request.responseText;
//将服务器返回的字符串写到页面中ID为message的区域
} else {
alert(http_request.status);
}
}
}
</script>
在<body>区域建立一个文本框,id为163id
<input type="text" id="163id" onpropertychange="IDRequest('http://reg.163.com/register/checkssn.jsp?username=')" />
再建一个id为messsge的空白区域用来显示返回字符串(也可以通过Javascript函数截取一部分字符串显示):
<div id="message"></div>
这样,一个基于AJAX技术的用户名检测页面就做好了,不过这个页面将返回服务器响应生成页面的所有字符串,当然还可以对返回的字符串进行一些操作,便于应用到不同的需要当中。
实例二: 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在
在上面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性。该属性包含了服务器返回响应文件的内容。现在我们以XMLDocument对象方式返回响应,此时将不再需要reponseText属性而使用responseXML属性。
首先登陆金山通行证注册页面,我们发现金山通行证用户名的检测方式为:
pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用户名,并且返回XML数据:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<response>
<method>isExistedUid</method>
<result>-2</result>
</response>
当result值为-1时表示此用户名已被注册,当result值为-2时表示此用户名尚未注册,因此通过对result值的判断可以知道用户名是否被注册。
对上例代码进行修改:
首先找到
document.getElementById('message').innerHTML = xmlhttp_request.responseText;
改为:
var response = xmlhttp_request.responseXML.documentElement;
var result = response.getElementsByTagName('result')[0].firstChild.data;//返回result节点数据
if(result ==-2){
document.getElementById('message').innerHTML = "用户名"+document.getElementById('163id').value+"尚未注册";
}
else if(result ==-1){
document.getElementById('message').innerHTML = "对不起,用户名"+document.getElementById('163id').value+"已经注册";
}
通过以上两个实例说明了AJAX的客户端基础应用,采用的是网易和金山现成的服务器端程序,当然为了开发合适自己页面的程序,还需要对自己编写服务器端程序,这设计到程序语言及数据库的操作,对于有一定程序基础的读者一定不是很难的事情,本文着重讨论了客户端AJAX的应用体验,广大读者可以根据本文讲的原理结合各种样式表现手法作出绚丽多彩的应用,希望本文能够起到抛砖引玉的作用。
分享到:
- 2007-07-28 11:30
- 浏览 1598
- 评论(0)
- 论坛回复 / 浏览 (0 / 3376)
- 查看更多
相关推荐
描述:探讨了Web 2.0和Ajax的核心概念,包括它们在现代网络应用中的角色和影响。 标签:Ajax 部分内容:提到了Jim Driscoll对Web 2.0和Ajax的讲解,涵盖了定义、历史背景、Web 2.0的例子以及其关键特性。 ### Web...
本详细探讨将深入剖析AJAX的核心概念、工作原理及其在Web 2.0中的广泛应用。 一、AJAX概述 AJAX并不是一种单一的技术,而是一种利用现有Web技术(JavaScript、XML、HTML、CSS等)组合创建的开发模式。其主要特点是...
《PHP+Ajax Web2.0编程技术与项目开发大全》是一部深入探讨现代Web开发的著作,其中涵盖了PHP作为服务器端脚本语言与Ajax(异步JavaScript和XML)技术结合使用,构建动态、交互性强的Web2.0应用程序的精髓。...
在《Web 2.0动态网站开发 : Ajax技术与应用》这本书中,作者阮征可能会详细讲解如何使用Ajax技术实现以下功能: - **异步数据交换**:Ajax使得网页可以在后台与服务器进行通信,用户无需等待页面刷新即可看到更新。...
《Pragmatic Ajax - A Web 2.0 Primer》是一本深入探讨Web 2.0核心技术之一Ajax(Asynchronous JavaScript and XML)的指南。Ajax是21世纪初互联网技术的一次重大飞跃,它使得网页无需刷新即可实现数据的动态更新,...
《Ajax修炼之道:Web 2.0入门 2007》是一本专注于Ajax技术和Web 2.0应用的入门指南。这本书详细介绍了如何利用Ajax技术来构建动态、交互性强的网页应用程序,从而提升用户体验。Ajax,即Asynchronous JavaScript and...
《Pragmatic Ajax A Web2.0 Primer》是一本深入探讨Web 2.0核心技术——Ajax(异步JavaScript和XML)的国外经典著作。这本书旨在帮助开发者理解如何利用Ajax技术构建更高效、更具交互性的Web应用程序。Ajax的核心...
本文将详细探讨Web 1.0与Web 2.0之间的关键区别,并分析这些变化如何影响网络结构、用户交互以及新兴技术的应用。 #### Web 1.0简介 Web 1.0通常指的是互联网发展的早期阶段,大约在1990年代中期至2000年代初。这...
本文将详细探讨Web2.0的核心理念、基础理论、关键技术,以及信息服务机构在Web2.0背景下的应用调查和对策。 Web2.0是一个伴随着互联网技术进步而出现的概念,它不仅代表了网络应用的一种形态,也是互联网发展的新...
在这个光盘中,可能会涵盖关于用户界面设计、社区构建、数据共享API(如Facebook API或Twitter API)的使用,以及如何利用AJAX提升Web 2.0应用的用户体验。 光盘内的文件可能包括: 1. PHP源码:提供书中实例的完整...
在本文中,我们将深入探讨如何使用Web 2.0、C#和Ajax技术来实现一个无刷新的三联动下拉框。这种交互式设计能够极大地提升用户体验,因为它允许用户在不重新加载整个页面的情况下获取和更新信息。 首先,我们要了解...
这个使用教程将深入探讨如何利用CSS、JavaScript和ASP等技术来构建和优化Web2.0应用。 一、CSS(层叠样式表) CSS是控制网页样式并实现页面布局的重要工具。在Web2.0中,CSS用于创建美观、响应式和易于阅读的界面。...
- **《Microformats: Empowering Your Markup for Web2.0》**:该书详细介绍了微格式的概念和技术细节,帮助开发者理解和应用微格式,从而增强网页的语义性和互操作性。 通过以上知识点的总结,我们可以看出Web2.0...
这在Web2.0应用中非常常见,如Google Maps和Facebook的实时聊天功能。 2. **富互联网应用(RIA)**:Flash、Flex、Silverlight等技术为创建具有桌面应用般体验的网页应用提供了可能,这些应用能够提供丰富的媒体...
Web2.0技术的核心应用包括博客(Blog)、标签(TAG)、RSS、维基(Wiki)等,这些应用通过六度分隔理论、XML和AJAX等技术实现,并且支持如Flickr、Craigslist、Linkedin等网站。 博客是一种网络日记形式,它是继Email、...
这本书详细阐述了WEB2.0的核心理念,包括用户参与、社交网络、富互联网应用(RIA)、数据共享和开放API等关键要素。全彩高清的插图和示例使得即使对技术不熟悉的读者也能通过直观的视觉体验,迅速理解和掌握WEB2.0的...
《Web 2.0 Security: Defending Ajax, RIA, and SOA》是一本由Shreeraaj Shah编写的权威性著作,深入探讨了在Web 2.0环境下如何有效地保护诸如Ajax(Asynchronous JavaScript and XML)、RIA(Rich Internet ...
本文将针对基于AJAX的Web2.0应用程序安全问题进行分析,探讨常见的三类安全问题,并结合实验平台,提出相应的解决方案和建议。 首先,我们需了解Web2.0的概念。Web2.0是以Flickr、Craigslist、Linkedin等网站为代表...