浅谈ajax

Posted 喜东东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈ajax相关的知识,希望对你有一定的参考价值。

ajax介绍

       ajax即“Asynchronous javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,它并不是一门新的语言。

       通过在后台与服务器进行少量数据交换,ajax可以使网页实现异步更新。       

       这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。而传统的网页如果需要更新内容,必需重载整个网页面。

 

ajax技术体系

         Xhtml和CSS

   使用文档对象模型(Document Object Model)作动态显示和交互

   使用XML和XSLT做数据交互和操作

   使用XMLHttpRequest进行异步数据接收

 

ajax的工作流程

 

技术分享图片

 

关于XmlHttpRequest对象

 

属性:

   readyState

       0: 请求未初始化

       1: 服务器连接已建立

       2: 请求已接收

       3: 请求处理中

       4: 请求已完成,且响应已就绪

   State

       200:     "OK"

       404: 未找到页面

   responseText

       获得字符串形式的响应数据。

   responseXML

       获得 XML 形式的响应数据。

   onreadystatechange

       存储函数(或函数名),每当 readyState     属性改变时,就会调用该函数。

 

方法:

xmlHttpRequst对象利用send()和open()方法与服务器进行交互。

    open(method,url,async)

        method:请求的类型;GET 或 POST

        url:文件在服务器上的位置

        async:true(异步)或 false(同步)

 

    send(string) 

          string:仅用于 POST 请求

如果是post请求,必须使用 setRequestHeader() 来添加 HTTP 头。然后在send() 方法中设置发送的数据,例如:

xmlhttp.open("POST","ajax_test.asp",true); 

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 

xmlhttp.send("fname=Bill&lname=Gates");

 

ajax的使用步骤

 

1、创建XMLHttpRequest对象

    不同的浏览器使用的异步调用对象也有所不同,在IE浏览器中异步调用使用的是XMLHTTP组件中的XMLHttpRequest对象,而在Netscape、Firefox浏览器中则直接使用XMLHttpRequest组件。因此,在不同浏览器中创建XMLHttpRequest对象的方式都有所不同。

      在IE浏览器中创建XMLHttpRequest对象的方式如下所示:

   var xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");

          在Netscape浏览器中创建XMLHttpRequest对象的方式如下所示:

   var xmlHttpRequest = new XMLHttpRequest();

 

2、创建HTTP请求

      创建了XMLHttpRequest对象之后,必须为XMLHttpRequest对象创建HTTP请求,用于说明XMLHttpRequest对象要从哪里获取数据.通常可以是网站中的数据,也可以是本地中其他文件中的数据.

      创建HTTP请求可以使用XMLHttpRequest对象的open()方法,其语法代码如下所示:

      XMLHttpRequest.open(method,URL,flag,name,password)

 

代码中的参数解释如下所示:

      method:该参数用于指定HTTP的请求方法,一共有get、post、head、put、delete五种方法,常用的方法为get和post。

      URL:该参数用于指定HTTP请求的URL地址,可以是绝对URL,也可以是相对URL。

      flag:该参数为可选参数,参数值为布尔型。该参数用于指定是否使用异步方式。true表示异步方式、false表示同步方式,默认为true。

      name:该参数为可选参数,用于输入用户名。如果服务器需要验证,则必须使用该参数。

      password:该参数为可选参数,用于输入密码。如果服务器需要验证,则必须使用该参数。通常可以使用以下代码来访问一个网站文件的内容。

 

3、设置响应HTTP请求状态变化的函数

        创建完HTTP请求之后,应该就可以将HTTP请求发送给Web服务器了。然而,发送HTTP请求的目的是为了接收从服务器中返回的数据。从创建XMLHttpRequest对象开始,到发送数据、接收数据、XMLHttpRequest对象一共会经历以下5中状态。

 

      ⑴未初始化状态。在创建完XMLHttpRequest对象时,该对象处于未初始化状态,此时XMLHttpRequest对象的readyState属性值为0。

      ⑵初始化状态。在创建完XMLHttpRequest对象后使用open()方法创建了HTTP请求时,该对象处于初始化状态。此时XMLHttpRequest对象的readyState属性值为1。

      ⑶发送数据状态。在初始化XMLHttpRequest对象后,使用send()方法发送数据时,该对象处于发送数据状态,此时XMLHttpRequest对象的readyState属性值为2。

      ⑷接收数据状态。Web服务器接收完数据并进行处理完毕之后,向客户端传送返回的结果。此时,XMLHttpRequest对象处于接收数据状态,XMLHttpRequest对象的readyState属性值为3。

      ⑸完成状态。XMLHttpRequest对象接收数据完毕后,进入完成状态,此时XMLHttpRequest对象的readyState属性值为4。此时接收完毕后的数据存入在客户端计算机的内存中,可以使用responseText属性或responseXml属性来获取数据。

 

       只有在XMLHttpRequest对象完成了以上5个步骤之后,才可以获取从服务器端返回的数据。因此,如果要获得从服务器端返回的数据,就必须要先判断XMLHttpRequest对象的状态。

 

      XMLHttpRequest对象可以响应readystatechange事件,该事件在XMLHttpRequest对象状态改变时(也就是readyState属性值改变时)激发。因此,可以通过该事件调用一个函数,并在该函数中判断XMLHttpRequest对象的readyState属性值。如果readyState属性值为4则使用responseText属性或responseXml属性来获取数据。

 

4、设置获取服务器返回数据的语句

      如果XMLHttpRequest对象的readyState属性值等于4,表示异步调用过程完毕,就可以通过XMLHttpRequest对象的responseText属性或responseXml属性来获取数据。

      但是,异步调用过程完毕,并不代表异步调用成功了,如果要判断异步调用是否成功,还要判断XMLHttpRequest对象的status属性值,只有该属性值为200,才表示异步调用成功,因此,要获取服务器返回数据的语句,还必须要先判断XMLHttpRequest对象的status属性值是否等于200

 

5、发送HTTP请求

      在经过以上几个步骤的设置之后,就可以将HTTP请求发送到Web服务器上去了。发送HTTP请求可以使用XMLHttpRequest对象的send()方法,其语法代码如下所示:

      XMLHttpRequest.send(data)

 

      其中data是个可选参数,如果请求的数据不需要参数,即可以使用null来替代。data参数的格式与在URL中传递参数的格式类似。

(注意:只有在使用send()方法之后,XMLHttpRequest对象的readyState属性值才会开始改变,也才会激发readystatechange事件,并调用函数)

 

6、局部更新

      在通过Ajax的异步调用获得服务器端数据之后,可以使用JavaScript或DOM来将网页中的数据进行局部更新。常用的局部更新的方式有以下3种:

    1,表单对象的数据更新;

    2,IE浏览器中标签间文本的更新;

    3,DOM技术的局部刷新

以上是关于浅谈ajax的主要内容,如果未能解决你的问题,请参考以下文章

浅谈ajax

浅谈ajax

浅谈ajax

浅谈对ajax的认知

浅谈iframe与ajax

浅谈Ajax 异步的几点细节