Ajax发展历史AJAX全称为“AsynchronousJavaScriptandXML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。该技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由OutlookWebAccess小组写成。该组件原属于微软ExchangeServer,并且迅速地成为了InternetExplorer4.0的一部分。部分观察家认为,OutlookWebAccess是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax:ANewApproachtoWebApplications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息,减少网络阻塞。随着web2.0的兴起,RIA(richinterfaceapplication)概念的推出,Ajax的作用越来重要,甚至还没有找到一个更好的替代品。虽然Adobe公司的as3.0也推出,但是flash庞大的躯体,在目前拥挤的网络上还有点力不从心。()6.2Ajax的基础应用首先,我们需要用JavaScript来创建XMLHttpRequest对象向服务器发送一个HTTP请求,XMLHttpRequest类首先由InternetExplorer以ActiveX对象引入,被称为XMLHTTP。后来Mozilla﹑Netscape﹑Safari和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。对于InternetExplorer浏览器,创建XMLHttpRequest方法如下:xmlHttp=newActiveXObject(Msxml2.XMLHTTP.3.0);//3.0或4.0,5.0xmlHttp=newActiveXObject(Msxml2.XMLHTTP);xmlHttp=newActiveXObject(Microsoft.XMLHTTP);对于Mozilla﹑Netscape﹑Safari等浏览器,创建XMLHttpRequest方法如下(IE7和Firefox3是一样的了):xmlHttp=newXMLHttpRequest();在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:varxmlHttp=false;//开始初始化XMLHttpRequest对象if(window.XMLHttpRequest){//Mozilla(IE7)浏览器xmlHttp=newXMLHttpRequest();if(xmlHttp.overrideMimeType){//设置MiME类别xmlHttp.overrideMimeType('text/xml');}}elseif(window.ActiveXObject){//IE(7以下版本)浏览器try{xmlHttp=newActiveXObject(Msxml2.XMLHTTP);}catch(e){try{xmlHttp=newActiveXObject(Microsoft.XMLHTTP);}catch(e){xmlHttp=false;}}}在定义对象后,就要发送请求了。可以调用HTTP请求类的open()和send()方法,如下所示:xmlHttp.open('GET',URL,true);xmlHttp.send(null);open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。第二个参数是请求页面的URL。第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是AJAX中的A。用JavaScript来创建XMLHttpRequest类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:xmlHttp.onreadystatechange=function(){//JavaScript代码段if(xmlHttp.readyState==4){if(xmlHttp.status==200){if(xmlHttp.responseText){//操作服务器返回的数据process(xmlHttp.responseText);}}}else{//showloading}};首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest提供了readyState属性来对服务器响应进行判断。readyState的取值如下:0(未初始化)、1(正在装载)、2(装载完毕)、3(交互中)、4(完成)当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。Ajax一次操作就算是完成了,是不是很简单?实际上Ajax的基础操作也就是这样简单,只是在不同的应用上对返回特殊处理就显得很复杂,我们透过现象看本质也就这样几行,详细的Ajax基础教程可以参考各个浏览器的官方说明。6.3jQuery中Ajax在第一章提到Javascript框架或者是工具中都包含了封装上述功能的Ajax工具,就不一一介绍,下边主要讲讲JQuery中的Ajax工具包。使用jQuery将使Ajax变得及其简单。jQuery提供有一些函数,这些函数是根据我们日常开发的需要而封装的一些快捷操作,比如:load、ajax、get、post等等。可以使简单的工作变得更加简单,复杂的工作变得不再复杂。jQuery的ajax工具包封装有三个层次,目的有两,第一为了符合命名规范,见明思义;第二就是为区分跨域操作,因为第三层的两个函数可以跨域操作。这样写有点牵强,先这里理解,后边讲了JSON和JSONP就明白了。最底层就是Ajax,封装了基础Ajax一些操作;第二层就是load、get、post,封装了jQuery的Ajax;第三层就是getScript、getJSON,封装了get。下边我们就一一的介绍这些函数(方法)的用法。6.3.1.jQuery.getScript(url,[callback]):通过GET方式请求载入并执行一个JavaScript文件。这个函数就是一个get的简写,看看源代码:returnjQuery.get(url,null,callback,script);参数名称类型说明urlString请求的HTML页的URL地址Callback(可选)Function载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),不传递参数jQuery1.2版本之前,getScript只能调用同域JS文件。1.2中,您可以跨域调用JavaScript文件。注意:Safari2或更早的版本不能在全局作用域中同步执行脚本。如果通过getScript加入脚本,请加入延时函数。示例代码:加载并执行test.js。$.getScript(test.js);提示:本身xmlHttp对象是不能进行异域操作的,但是浏览器head中加载script可以,这个函数就是在head中创建一个script元素,元素的src属性是url,应该真正不属于Ajax范畴。6.3.5.jQuery.getJSON(url,[callback]):通过GET方式请求载入并执行一个JavaScript文件。这个函数就是一个get的简写,看看源代码:returnjQuery.get(url,null,callback,json);参数名称类型说明urlString请求的HTML页的URL地址Callback(可选)Function载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),自动将请求结果(执行后的JS对象)传递给该函数这个函数的和上边的getScript的工作原理基本一样,我们看看上边的源代码就知道,支持跨域操作,本身也支持jsonp,什么是jsonp下边的章节我们再说。示例代码:$.getJSON(test.js,function(json){$.each(jsonfunction(i,n){alert(n);alert(json.i);})});6.3.2.load(url,[data],[callback]):载入远程HTML文件代码并插入至DOM中。参数名称类型说明urlString请求的HTML页的URL地址Data(可选)Obj发送至服务器的key/value数据Callback(可选)Function请求完成时(不需要是success的)的回调函数,自动会将请求的结果,状态,XMLHttp对象传递给该函数。这个方法默认使用GET方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery1.2中,可以指定选择符,来筛选载入的HTML文档,DOM中将仅插入筛选出的HTML代码(url和选择器之间用空格分开)。语法形如url#someselector。这个方法可以很方便的动态加载一些HTML文件,例如表单。示例代码:$(.ajax.load).load(/index.html.p,function(responseText,textStatus,XMLHttpRequest){this;//在这里this指向的是当前的DOM对象,即$(.ajax.load)[0]//alert(responseText);//请求返回的内容//alert(textStatus);//请求状态:success,error//alert(XMLHttpRequest);//XMLHttpRequest对象});6.3.3.jQuery.get(url,[data],[callback]):使用GET方式来进行异步请求参数名称类型说明urlString请求的HTML页的URL地址Data(可选)Obj发送至服务器的key/value数据会做为QueryString附加到请求URL中Callback(可选)Function载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),自动将请求结果和状态传递给该函数这是一个简单的GET请求功能以取代复杂$.ajax。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用$.ajax。示例代码:$.get(./index.html,{app:test,action:test},function(data,textStatus){//返回的data可以是xmlDoc,jsonObj,html,text,等等.this;//在这里this指向的是Ajax请求的选项配置信息,请参考下图alert(data);//alert(textStatus);//请求状态:success,error等等。//当然这里捕捉不到error,因为error的时候根本不会运行