最近互联网上比较火热的话题当然是关于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的 应用体验,广大读者可以根据本文讲的原理结合各种样式表现手法作出绚丽多彩的 应用,希望本文能够起到抛砖引玉的作用。

本文固定链接:http://www.verydemo.com/demo_c107_i12472.html

WEB2.0中AJAX应用的详细探讨相关推荐

  1. [转]WEB2.0中AJAX应用的详细探讨

    最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或 ...

  2. WEB 2.0中AJAX应用的详细探讨

    最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或 ...

  3. web2.0中流行的设计元素:颜色

    web2.0流行网页配色 颜色的变化跟人类的智慧一样,是无穷的,每个阶段都会有流行的色彩,有属于一个时代的颜色!WEB2.0是一个概念,它宣扬,定位了一些东西,以用户为中心,群体智慧,分享等等,等等. ...

  4. Web 2.0中AJAX技术应用详解[转]

    今年互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或 ...

  5. Ajax技术WEB开发__WEB2.0中AJAX应用的详解

    ====================================================== 注:本文源代码点此下载 ================================= ...

  6. [导入]web2.0中流行的设计元素:颜色

    颜色的变化跟人类的智慧一样,是无穷的,每个阶段都会有流行的色彩,有属于一个时代的颜色!WEB2.0是一个概念,它宣扬,定位了一些东西,以用户为中心,群体智慧,分享等等,等等.同时顺应这些需求,一些顶尖 ...

  7. vue2.0中Ajax库(axios)

    差点断更,最近换了新公司,新项目用的vue1,花了4天时间升级了大部分页面到vue2; 在main.js中导入axios,并在vue的原型上添加该实例: import axios from 'axio ...

  8. mvc4 ajax url参数,MVC4.0中Ajax通过a标签向后台Action传递参数问题?

    Ajax: $(document).ready(function dianZan(id,dianZan){ $.ajax({ url :"Home/DianZan", type:& ...

  9. Web2.0十大Ajax安全漏洞以及成因

    ***还有可能在浏览器中加载JavaScript,以便迫使浏览器发出跨域的调用并打开安全漏洞.数据序列化--浏览器可以调用Ajax来实施数据序列化.未经认证的内容或者使用不安全的调用,轻则导致会话内容 ...

最新文章

  1. sql行数少于10_如何用少于100行的代码创建生成艺术
  2. 作者:张彦霞(1974-),女,博士,中国科学院国家天文台研究员、硕士生导师...
  3. 自适应来电模拟器微信小程序源码 可自定义来电名称归属地铃声等
  4. 队列实现max操作,要求尽量提高效率。
  5. java 访问https 证书_Java+SSL证书访问Https站点
  6. Python验证码识别:利用pytesser识别简单图形验证码
  7. IAR 软件激活步骤
  8. ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)
  9. 文本智能处理与RPA领军企业达观数据宣布完成5.8亿元C轮融资
  10. 【独行秀才】macOS Big Sur 11.5 Beta3版(20G5042c)原版镜像
  11. 京东白条如何直接取现|分分卡开通说明
  12. 新鲜出炉的三维动画应用领域,学3D建模好工作找不完
  13. 站上风口,文心一言任重道远
  14. 随机模拟在多排服务器上的应用,在Excel中应用随机函数模拟多服务台单队列排队系统...
  15. 谷歌chrome浏览器源码分析
  16. 物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示
  17. 3分钟带你彻底弄懂数码管的段选与位选
  18. (转)Android系统WAP上网设置
  19. 【数据结构与算法】思维导图
  20. 结构可靠度matlab jc,结构可靠度分析的响应面法及其Matlab实现

热门文章

  1. 小壁虎(EFM32 Zero Gecko)开发板测量功耗
  2. Android手机应用第三方模拟器使用、真机测试运行方法以及AVD 模拟器黑屏的解决尝试
  3. 汽车计算机控制电路按功能分,新手篇—轻松看懂汽车电路图(下)
  4. 高中数学40分怎么办_高三数学40分怎么提高 零基础逆袭的方法
  5. hadoopHA部分文件和配置
  6. PPT中插入SmartArt图形及美化
  7. 牛客 HJ31 单词倒排
  8. Blast生成蛋白质序列位置特异性矩阵-PSSM矩阵详细版
  9. 零基础想考HCIP(华为认证网络工程师)需要准备什么?
  10. linux查看和结束进程,Linux查看和结束进程命令详解