初学者入门教程,来源于网络AJAX简介AJAX全称为“AsynchronousJavaScriptandXML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术。类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。通过AJAX,您的JavaScript可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,您的JavaScript可在不重载页面的情况与Web服务器交换数据。AJAX在浏览器与Web服务器之间使用异步数据传输(HTTP请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。AJAX可使因特网应用程序更小、更快,更友好。AJAX是一种独立于Web服务器软件的浏览器技术。AJAX基于下列Web标准:JavaScriptXMLHTMLCSS在AJAX中使用的Web标准已被良好定义,并被所有的主流浏览器支持。AJAX应用程序独立于浏览器和平台。1.AJAX使用Http请求在传统的JavaScript编程中,假如您希望从服务器上的文件或数据库中得到任何的信息,或者向服务器发送信息的话,就必须利用一个HTML表单向服务器GET或POST数据。而用户则需要单击“提交”按钮来发送/获取信息,等待服务器的响应,然后一张新的页面会加载结果。由于每当用户提交输入后服务器都会返回一张新的页面,传统的web应用程序变得运行缓慢,且越来越不友好。通过利用AJAX,您的JavaScript会通过JavaScript的XMLHttpRequest对象,直接与服务器来通信。通过使用HTTP请求,web页可向服务器进行请求,并得到来自服务器的响应,而不加载页面。用户可以停留在同一个页面,他或她不会注意到脚本在后台请求过页面,或向服务器发送过数据。XMLHttpRequest对象:通过使用XMLHttpRequest对象,web开发者可以做到在页面已加载后从服务器更新页面!您的第一个AJAX应用程序:为了让您理解AJAX的工作原理,我们将创建一个小型的AJAX应用程序。首先,我们需要一个带有两个文本框的HTML表单:用户名和时间。用户名文本框由用户填写,而时间文本框使用AJAX进行填写。此HTML文件名为testAjax.htm(请注意这个HTML表单没有提交按钮!):2.AJAX-浏览器支持AJAX的要点是XMLHttpRequest对象。不同的浏览器创建XMLHttpRequest对象的方法是有差异的。IE浏览器使用ActiveXObject,而其他的浏览器使用名为XMLHttpRequest的JavaScript内建对象。如需针对不同的浏览器来创建此对象,我们要使用一条tryandcatch语句。您可以在我们的JavaScript教程中阅读更多有关try和catch语句的内容。让我们用这段创建XMLHttpRequest对象的JavaScript来更新一下我们的testAjax.htm文件:htmlbodyscripttype=text/javascriptfunctionajaxFunction(){varxmlHttp;try{xmlHttp=newXMLHttpRequest();}catch(e){try{xmlHttp=newActiveXObject(Msxml2.XMLHTTP);}catch(e){try{xmlHttp=newActiveXObject(Microsoft.XMLHTTP);}catch(e){alert(您的浏览器不支持AJAX!);returnfalse;}}}}/scriptformname=myForm用户:inputtype=textname=username/时间:inputtype=textname=time//form/body/html例子解释:首先声明一个保存XMLHttpRequest对象的xmlHttp变量。然后使用XMLHttp=newXMLHttpRequest()来创建此对象。这条语句针对Firefox、Opera以及Safari浏览器。假如失败,则尝试针对InternetExplorer6.0+的xmlHttp=newActiveXObject(Msxml2.XMLHTTP),假如也不成功,则尝试针对InternetExplorer5.5+的xmlHttp=newActiveXObject(Microsoft.XMLHTTP)。假如这三种方法都不起作用,那么这个用户所使用的浏览器已经太过时了,他或她会看到一个声明此浏览器不支持AJAX的提示。注释:上面这些浏览器定制的代码很长,也很复杂。不过,每当您希望创建XMLHttpRequest对象时,这些代码就能派上用场,因此您可以在任何需要使用的时间拷贝粘贴这些代码。上面这些代码兼容所有的主流浏览器:InternetExplorer、Opera、Firefox以及Safari。3.AJAX-XMLHttpRequest对象在向服务器发送数据之前,我们有必要解释一下XMLHttpRequest对象的三个重要的属性。onreadystatechange属性onreadystatechange属性存有处理服务器响应的函数。下面的代码定义一个空的函数,可同时对onreadystatechange属性进行设置:xmlHttp.onreadystatechange=function(){//我们需要在这里写一些代码}readyState属性readyState属性存有服务器响应的状态信息。每当readyState改变时,onreadystatechange函数就会被执行。这是readyState属性可能的值:状态描述0请求未初始化(在调用open()之前)1请求已提出(调用send()之前)2请求已发送(这里通常可以从响应得到内容头部)3请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)4请求已完成(可以访问服务器响应并使用它)我们要向这个onreadystatechange函数添加一条If语句,来测试我们的响应是否已完成(意味着可获得数据):xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){//从服务器的response获得数据}}responseText属性可以通过responseText属性来取回由服务器返回的数据。在我们的代码中,我们将把时间文本框的值设置为等于responseText:xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){document.myForm.time.value=xmlHttp.responseText;}}4.AJAX-请求服务器要想把请求发送到服务器,我们就需要使用open()方法和send()方法。open()方法需要三个参数。第一个参数定义发送请求所使用的方法(GET还是POST)。第二个参数规定服务器端脚本的URL。第三个参数规定应当对请求进行异步地处理。send()方法可将请求送往服务器。如果我们假设HTML文件和test.txt文件位于相同的目录,那么代码是这样的:xmlhttp.open(GET,test.txt,true);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4){alert(xmlhttp.responseText)}}xmlhttp.send(null)运行结果:发出Ajax请求functioncallServer(){//Getthecityandstatefromthewebformvarcity=document.getElementById(city).value;varstate=document.getElementById(state).value;//Onlygooniftherearevaluesforbothfieldsif((city==null)||(city==))return;if((state==null)||(state==))return;//BuildtheURLtoconnecttovarurl=/scripts/getZipCode.php?city=+escape(city)+&state=+escape(state);//OpenaconnectiontotheserverxmlHttp.open(GET,url,true);//Setupafunctionfortheservertorunwhenit'sdonexmlHttp.onreadystatechange=updatePage;//SendtherequestxmlHttp.send(null);}其中大部分代码意义都很明确。开始的代码使用基本JavaScript代码获取几个表单字段的值。然后设置一个PHP脚本作为链接的目标。要注意脚本URL的指定方式,city和state(来自表单)使用简单的GET参数附加在URL之后。然后打开一个连接,这是您第一次看到使用XMLHttpRequest。其中指定了连接方法(GET)和要连接的URL。最后一个参数如果设为true,那么将请求一个异步连接(这就是Ajax的由来)。如果使用false,那么代码发出请求后将等待服务器返回的响应。如果设为true,当服务器在后台处理请求的时候用户仍然可以使用表单(甚至调用其他JavaScript方法)。xmlHttp(要记住,这是XMLHttpRequest对象实例)的onreadystatechange属性可以告诉服务器在运行完成后(可能要用五分钟或者五个小时)做什么。因为代码没有等待服务器,必须让服务器知道怎么做以便您能作出响应。在这个示例中,如果服务器处理完了请求,一个特殊的名为updatePage()的方法将被触发。最后,使用值null调用send()。因为已经在请求URL中添加了要发送给服务器的数据(city和state),所以请求中不需要发送任何数据。这样就发出了请求,服务器按照您的要求工作。处理响应现在要面对服务器的响应了。现在只要知道两点:什么也不要做,直到xmlHttp.readyState属性的值等于4。服务器将把响应填充到xmlHttp.responseText属性中。如:functionupdatePage(){if(xmlHttp.readyState==4){varresponse=xmlHttp.responseText;document.getElementById(zipCode).value=response;}}它等待服务器调用,如果是就绪状态,则使用服务器返回的值(这里是用户输入的城市和州的ZIP编码)设置另一个表单字段的值。连接Web表单一个JavaScript方法捕捉用户输入表单的信息并将其发送到服务器,另一个JavaScript方法监听和处理响应,并在响应返回时设置字段的值。所有这些实际上都依赖于调用第一个JavaScript方法,它启动了整个过程。最明显的办法是在HTML表单中增加一个按钮,但这是2001年的办法,您不这样认为吗?还是像下面这样利用JavaScript技术吧。formpCity:inputtype=textname=cityid=citysize=25onChange=callServer();//ppState:inputtype=textname=stateid=statesize=25onChange=callServer();//ppZipCode:inputtype=textname=