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

最近互联网上比较火热的话题当然是关于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标准的网页,在区域插入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); } } }

在区域建立一个文本框,id为163id

再建一个id为messsge的空白区域用来显示返回字符串(也可以通过javascript函数截取一部分字符串显示):

这样,一个基于ajax技术的用户名检测页面就做好了,不过这个页面将返回服务器响应生成页面的所有字符串,当然还可以对返回的字符串进行一些操作,便于应用到不同的需要当中。

实例二: 以xmldocument对象方式返回响应来验证金山通行证帐号是否存在

在上面的例子中,当服务器对http请求的响应被收到后,我们会调用请求对象的reponsetext属性。该属性包含了服务器返回响应文件的内容。现在我们以xmldocument对象方式返回响应,此时将不再需要reponsetext属性而使用responsexml属性。

首先登陆金山通行证注册页面,我们发现金山通行证用户名的检测方式为: pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用户名,并且返回xml数据:

isexisteduid -2

当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的客户端基础应用,采用的是网易和金山现成的服务器端程序,当然为了开发合适自己页面的程序,还需要对自己编写服务器端程序,这设计到程序语言及数据库的操作,对于有一定程序基础的读者一定不是很难的事情。

演示地址:

说明:我已经将制作好的文件上传到我的blog,大家可以进行测试,由于ajax和xmlhttp不能跨域请求,所以测试时请调整ie的安全级别或者将xiacong.com暂时加入信任站点.

网易通行证查询演示(ajax): www.xiacong.com/test/163.htm

金山通行证查询演示(ajax): www.xiacong.com/test/j3.htm

======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/

Ajax技术WEB开发__WEB2.0中AJAX应用的详解相关推荐

  1. 用WEB技术栈开发NATIVE应用:WEEX SDK原理详解

    摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app.其同时解决了开发效率.发版速度以及用户体验三个核心问题.那么WEEX是如何实现的?目前WEE ...

  2. 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解

    MyEclipse集成Tomcat 首先配置Tomcat,即配置环境变量Java_HOME.path,在第一讲中已经完成了,不再赘述. Eclipse代码风格导入MyEclipse: 每个项目都要配置 ...

  3. 学python开发必须要会wsgi么_python Web开发你要理解的WSGI uwsgi详解

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  4. python uwsgi_python Web开发你要理解的WSGI uwsgi详解

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  5. 7.TensorRT中文版开发教程-----TensorRT中的INT8量化详解

    7. 如何使用TensorRT中的INT8 点击此处加入NVIDIA开发者计划 7.1. Introduction to Quantization TensorRT 支持使用 8 位整数来表示量化的浮 ...

  6. 前端开发:JS中的Window对象详解

    前言 在前端开发过程中,关于全局对象的使用是非常常用的,其实每个JS环境中都一个全局对象,尤其是在实际开发过程中全局范围内创建任何变量都是这个全局对象的属性,且任何函数都是它的方法.在实际浏览器环境下 ...

  7. ASP.NET AJAX 在Web开发中的应用

    摘 要 ASP.NET AJAX 实现了Web页面丰富的部分刷新效果.本文通过介绍AJAX原理,引申到ASP.NET AJAX原理,并总结了在Web 开发应用中要注意的若干问题.合理地利用ASP.NE ...

  8. Ajax技术群英会,火热报名中!

    Ajax技术群英会 --说说你最爱的Ajax框架 一.会议介绍 Ajax不仅仅是一种技术,更是Web 2.0时代最具创意的思想之一,它对Web世界的影响极其深远.随着Ajax技术的发展,各种Ajax框 ...

  9. viewstate 解码 php,.NET_asp.net中ViewState的用法详解,在web窗体控件设置为runat = serv - phpStudy...

    asp.net中ViewState的用法详解 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了 ...

最新文章

  1. 巧用宏定义进行调试 (转)
  2. 'utf-8' codec can't decode byte 0xb6 in position 34: invalid start byte
  3. android eclipse 报error loading /system/media/audio/ xxx 错的解决办法。
  4. adapter pattern java_适配器模式(Adapter Pattern)
  5. DXSDK_June10安装错误
  6. selenium自动化测试_为什么在生产中进行Selenium自动化测试对于您的下一个版本至关重要?...
  7. 金银岛(信息学奥赛一本通-T1225)
  8. ubuntu查看默认python版本_更改Ubuntu默认python版本的两种方法python- Anaconda
  9. Mysql数据库的备份与恢复
  10. 阿里云最简单的认证是什么?考试费用是多少?
  11. 后台数据不清理android,android 后台被数据清理后切换到前台数据丢失问题
  12. 安装GD库 GD库安装全过程详解
  13. Qt笔记 之 QListWidget控件的使用
  14. 做好OKR目标管理,迈出高效协作的第一步
  15. Node.js 单页应用
  16. 最近的大哥(单调栈)
  17. java榨汁机榨取不同水果,榨汁机别乱买,亲测榨水果翻车,九阳迷你原汁机评测...
  18. 2021.1.21课程摘要(逻辑教育-王劲胜)
  19. 文本溢出显示省略号,鼠标浮动查看全部内容
  20. 字符串中的表达式计算

热门文章

  1. 模态对话框与非模态对话框的区别 1
  2. matlab数值积分变步长,关于MATLAB数值积分及算例.ppt
  3. 二十一世纪大学英语读写教程(第二册)学习笔记(原文)——2 - Why They Excel(他们为何出类拔萃)
  4. 拿捏 javascript 中的节点操作
  5. [论]博士和小工的区别
  6. 桌游剧本杀行业解决方案
  7. 整数规划问题建模技巧与求解方法总结
  8. 【Shell牛客刷题系列】SHELL1 统计文件的行数:学习wc命令和文本三剑客awk、grep、sed命令
  9. 商业模式分析——以“Nutrisporter”APP为例
  10. Kubernetes——K8s架构与组件原理