Ajax入门介绍详解

Ajax

一、 Ajax 简介

AJAX Asynchronous JavaScript and XML ”( 异步 JavaScript XML) AJAX 并非缩写词 而是由 Jesse James Gaiiett 创造的名词 是指一种创建交互式 网页 应用的网页开发技术。

1. 同步交互和异步交互的理解

举个例子:普通 B/S 模式 ( 同步 )      AJAX 技术 ( 异步 )

       同步 :提交请求 -> 等待服务器处理 -> 处理完毕返回这个期间客户端浏览器不能干任何事

   同步是指:发送方发出数据后,等接收方发回响应以后才发下一数据包的通讯方式。  

          异步 : 请求通过事件触发 -> 服务器处理(这时浏览器仍然可以作其他        事情) -> 处理完毕

          异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数     据包的通讯方式

2.Ajax: 一种不用刷新整个页面便可与服务器通讯的办法

二、 Ajax 的工作原理

1. Ajax 的核心是 JavaScript 对象 XmlHttpRequest

2. AJAX 采用异步交互过程

AJAX 在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理 等待 处理 等待缺点。

用户的浏览器在执行任务时即装载了 AJAX 引擎。 AJAX 引擎用 JavaScript 语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。

         AJAX 引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用 Javascript 调用 AJAX 引擎来代替产生一个 HTTP 的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给 AJAX 来执行

3.XMLHttpRequest 对象

创建 XMLHttpRequest 对象(由于非标准所以实现方法不统一)

   (1)Internet Explorer XMLHttpRequest 实现为一个 ActiveX 对象

  (2) 其他浏器 Firefox Safari Opera …) 把它实现为一个本地                      JavaScript 对象。

         (3)XMLHttpRequest 在不同浏览器上的实现是兼容的,所以可以用同样                   的方式访问 XMLHttpRequest 实例的属性和方法,而不论这个实例创                   建的方法是什么。

        实例:

function getX hr (){

            var xhr ;

            try { //firefox,opera 浏览器

                xhr = new XMLHttpRequest();

            } catch (err){

                try { //IE 浏览器5.0

                    xhr = new ActiveXObject( "Microsoft.XMLHTTP" );

                } catch (er){

                    alert( " 您的浏览器版本太低了......" );

                }

            }

            return xhr;

}

4.XMLHttpRequest 对象方法

方法

描述

abort()

停止当前请求

getAllResponseHeaders()

http 请求的所有响应首部作为键 / 值对返回

getResponseHeader("headerLabel")

返回指定首部的串值

 

open(method,url,async)

 

规定请求的类型、 URL 以及是否异步处理请求。

method 请求的类型; GET POST

url 文件在服务器上的位置

async true 异步)或 false 同步)

send(content)

向服务器发送请求

setRequestHeader("label", "value")

把指定首部设置为所提供的值。在设置任何首部之前必须先调用 open()

    5.XMLHttpRequest 对象属性

 

属性

描述

onreadystatechange

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

readyState

存有 XMLHttpRequest 的状态。从 0 4 发生变化。

·         0: 请求未初始化

·         1: 服务器连接已建立

·         2: 请求已接收

·         3: 请求处理中

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

status

200: "OK"   404: 未找到页面

responseText

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

responseXML

获得 XML 形式的响应数据。

 

7. 发送请求方法与属性的介绍

利用 XMLHttpRequest 实例与服务器进行通信包含以下 3 个关键部分

  onreadystatechange 事件处理函数、 open 方法和 send 方法

(1) .onreadystatechange

  该事件处理函数由服务器触发,而不是用户

            Ajax 执行过程中,服务器会通知客户端当前的通信状态。这    依靠更新 XMLHttpRequest 对象的 readyState 来实现 , 改变 readyState               属性是服务器对客户端连接操作的一种方式。

          每次 readyState 属性的改变都会触发 readystatechange 事件

(2) .open(method, url, asynch)

method 请求类型,类似 “ GET 或” POST 的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用 GET( 可以在 GET 请求里通过附加在 URL 上的查询字符串来发送数据,不过数据大小限制为 2000 个字符 ) 。若需要向服务器发送数据,用 POST

url 路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。

asynch 表示请求是否要异步传输,默认值为 true( 异步 ) 。指定 true ,在读取后面的脚本之前,不需要等待服务器的相应。指定 false ,当脚本处理过程经过这点时,会停下来,一直等到 Ajax 请求执行完毕再继续执行。

在某些情况下,有些浏览器会把多个 XMLHttpRequest 请求的结果缓存在同一个 URL 。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到 URL 的最后,就能确保 URL 的惟一性,从而避免浏览器缓存结果

  (3).send(data)

    open 方法定义了 Ajax 请求的一些细节。 send 方法可为已经待命的请求发送指令

    data :将要传递给服务器的字符串。

    若选用的是 GET 请求 则不会发送任何数据 send 方法传递 null 即可 request.send(null)

    当向 send() 方法提供参数时,要确保 open() 中指定的方法是 POST ,如果没有数据作为请求体的一部分发送,则使用 null.

       (4).setRequestHeader(header,value)

参数 header 首部的名字

               参数 value 首部的值

    如果用 POST 请求向服务器发送数据 需要将 Content-type 的首部设置为 application/x-www-form-urlencoded 它会告知服务器正在发送数据 并且数据已经符合 URL 编码了。

   该方法必须在 open() 之后才能调用

(5) 发送请求get post 的区别总结

发送请求 : 如果是get 请求send( 参数) 参数:必须是null 或者xhr.send();

get 请求就不必要设置 xhr.setRequestHeader(header,value)

备注:如果xhr.send( 参数); 参数不为空情况下, 会自动转换成post 请求方式 您可以通过request.getMethod(); 方法获取请求的方式

     发送请求 : 如果是post 请求send( 参数) 参数:参数可以是null     xhr.send()|send( 带有参数的)post 请求在传递值的情况下必须       设置 xhr.setRequestHeader(header,value)

Get post 实例

Get

function getAjax(){

     // 获取xhr 对象

     var xhr = getXhr();

         // 规定请求类型     

     xhr.open( "get" , "main.jsp?username=123" , true );

     xhr.send();

     xhr.onreadystatechange = function (){

          // 判读是否处理完毕

          if (xhr.readyState==4){

               // 判读服务器是否处理成功!

              if (xhr.status==200){

                     alert(xhr.responseText);

              }

          }

                  }

}

post  

function post Ajax(){

     // 获取xhr 对象

     var xhr = getXhr();

     // 规定请求类型     

      xhr.open( "post" , "main.jsp" , true );

                 xhr.setRequestHeader( "Content-Type" ,

       "application/x-www-form-urlencoded" )

  xhr.send( "username=345&pass=123" );

     xhr.onreadystatechange = function (){

          // 判读是否处理完毕

          if (xhr.readyState==4){

               // 判读服务器是否处理成功!

              if (xhr.status==200){

                   alert(xhr.responseText);

              }

          }

                  }

}

8. 接收方法和属性

    XMLHttpRequest 的方法可向服务器发送请求。在 Ajax 处理过程        XMLHttpRequest 的属性有 readyState statusresponseText     responseXML 可被服务器更改

(1)readyState

readyState 属性表示 Ajax 请求的当前状态。它的值用数字代表。

0 代表未初始化。 还没有调用 open 方法

1 代表正在加载。 open 方法已被调用,但 send 方法还没有

  被调用

2 代表已加载完毕。 send 已被调用。请求已经开始

3 代表交互中。服务器正在发送响应

4 代表完成。响应发送完毕

    每次 readyState 值的改变,都会触发 readystatechange 事件。如

果把 onreadystatechange 事件处理函数赋给一个函数,那么每次

   readyState 值的改变都会引发该函数的执行。

    readyState 值的变化会因浏览器的不同而有所差异。但是,当请求

结束的时候,每个浏览器都会把 readyState 的值统一设为 4

(2) .status

服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发

  送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。

常用状态码及其含义:

404 没找到页面 (not found)

403 禁止访问 (forbidden)

500 内部服务器出错 (internal service error)

200 一切正常 (ok)

304 没有被修改 (not modified)( 服务器返回 304 状态 表示源文件没有被修改 )

XMLHttpRequest 对象中 服务器发送的状态码都保存在 status

  性里。通过把这个值和 200 304 比较,可以确保服务器是否已发送了一

  个成功的响应

(3) .responseText

       XMLHttpRequest responseText 属性包含了从服务器发送的数据。它

  是一个 HTML,XML 或普通文本,这取决于服务器发送的内容。

readyState 属性值变成 4 , responseText 属性才可用,表明

    Ajax 请求已经结束。

(4) .responseXML

如果服务器返回的是 XML , 那么数据将储存在 responseXML 属性中。

  只用服务器发送了带有正确首部信息的数据时 ,responseXML 属性才

是可用的。 MIME 类型必须为 text/xml

以上内容归 redarmy_chen 原创 , 版权归 redarmy_chen 所有不得随意转载   如有问题请发送邮件到 redarmy_chen@qq .com

你可能感兴趣的:(JavaScript,Ajax,浏览器,服务器,XMLhttpREquest,asynchronous)