现在的位置: 首页 > 综合 > 正文

Ajax

2017年12月14日 ⁄ 综合 ⁄ 共 11316字 ⁄ 字号 评论关闭

1、同步交互和异步交互

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

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

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

 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个

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

                       个数据包的通讯方式 

     易懂的理解:

     异步传输:   你传输吧,我去做我的事了,传输完了告诉我一声   
同步传输:   你现在传输,我要亲眼看你传输完成,才去做别的事 

2、什么是Ajax ---  B/S

Ajax的技术的产生

Ajax被认为是(Asynchronous JavaScript and XML的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.

3、什么是Ajax

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

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

Flash

Java applet

框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面

隐藏的iframe

XMLHttpRequest:该对象是对 JavaScript 的一个扩展,可使网页与服务器进行通信。是创建 Ajax 应用的最佳选择。实际上通常把 Ajax 当成 XMLHttpRequest 对象的代名词 

4Ajax的工作原理

Ajax的核心是JavaScript对象XmlHttpRequest

    该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

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

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

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

4使用AJAX,可以为JSP、开发人员、终端用户带来可见的便捷: 

5、AJAX包含的技术 

 AJAX:(Asynchronous JavaScript and XML)并不是一项新技术,其实是多种技术的综合,包括JavascriptXHTMLCSSDOMXMLXMLHttpRequest.

1服务器端语言:服务器需要具备向浏览器发送特定信息的能力。Ajax与服务器端语言无关。

2XML (eXtensible Markup Language,可扩展标记语言是一种描述数据的格式。AJAX 程序需要某种格式化的格式来在服务器和客户端之间传递信息,XML 是其中的一种选择

3XHTMLeXtended Hypertext Markup Language,使用扩展超媒体标记语言)和 CSSCascading Style Sheet,级联样式单)标准化呈现;

4DOMDocument Object Model,文档对象模型)实现动态显示和交互;

5使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取

6使用JavaScript绑定和处理所有数据

6、AJAX的缺陷 

AJAX不是完美的技术。也存在缺陷:

1    AJAX大量使用了JavascriptAJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。 

2   AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。 

3    对流媒体的支持没有FLASHJava Applet好。 

4    一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax

7XMLHttpRequest对象

1XMLHttpRequest对象
  XMLHttpRequestXMLHTTP组件的对象,通过这个对象,AJAX可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又加快了响应速度、缩短了用户等待的时间。 

2XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准.

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

Internet ExplorerXMLHttpRequest实现为一个ActiveX对象

其他浏览器(FirefoxSafariOpera…)把它实现为一个本地的JavaScript对象。

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

8XMLHttpRequest对象初始化

function   createXmlHttpRequest(){

   var xmlHttp;

   try{    //Firefox, Opera 8.0+, Safari

           xmlHttp=new XMLHttpRequest();

    }catch (e){

           try{    //Internet Explorer

                  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

            }catch (e){

                  try{

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

                  }catch (e){}  

           }

    }

   return xmlHttp;

 }

9、XMLHttpRequest对象方法

1abort()——停止当前请求 

2getAllResponseHeaders()——http请求的所有响应首部作为键/值对返回

3getResponseHeader("headerLabel")——返回指定首部的串值

4open(method,url)—— 建立对服务器的调用,method参数可以是GET,POSTurl参数可以是相对URL或绝对URL。这个方法还包括3个可选参数。 

5send(content)——向服务器发送请求 

6setRequestHeader("label", "value")——把指定首部设置为所提供的值。在设置任何首部之前必须先调用open() 

10XMLHttpRequest对象属性

11发送请求--方法和属性介绍

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

onreadystatechange 事件处理函数readyState

open 方法

send 方法 

12发送请求--方法和属性介绍

onreadystatechange:

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

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

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

open(method, url, asynch)

1XMLHttpRequest 对象的 open 方法允许程序员用一个Ajax调用向服务器发送请求。

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

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

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

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

send(data)

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

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

3若选用的是 GET 请求,则不会发送任何数据, 给 send 方法传递 null 即可:

request.send(null);

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

5完整的 Ajax 的 GET 请求示例:

setRequestHeader(header,value)

1当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是 GET 还是 POST

2Ajax 请求中,发送首部信息的工作可以由 setRequestHeader完成

参数header: 首部的名字;  参数value:首部的值。

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

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

5完整的 Ajax 的 POST 请求示例:

13接收--方法和属性介绍

用 XMLHttpRequest 的方法可向服务器发送请求。在 Ajax 处理过程中,XMLHttpRequest 的如下属性可被服务器更改:

readyState

status

responseText

responseXML

readyState

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

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

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

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

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

代表完成。响应发送完毕

每次 readyState 值的改变,都会触发 readystatechange 事件。如果把 onreadystatechange 事件处理函数赋给一个函数,那么每次 readyState 值的改变都会引发该函数的执行。

readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把 readyState 的值统一设为 4

status

服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。

常用状态码及其含义:

1404 没找到页面(not found)

2403 禁止访问(forbidden)

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

4200 一切正常(ok)

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

在 XMLHttpRequest 对象中,服务器发送的状态码都保存在 status 属性里。通过把这个值和 200 或 304 比较,可以确保服务器是否已发送了一个成功的响应

responseText

1XMLHttpRequest 的 responseText 属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。

2当 readyState 属性值变成 , responseText 属性才可用,表明 Ajax 请求已经结束。

responseXML

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

只用服务器发送了带有正确首部信息的数据时, responseXML 属性才是可用的。 MIME 类型必须为 text/xml

14、AJAX开发框架 

AJAX实质上也是遵循Request/Server模式,所以这个框架基本的流程是:

1对象初始化

2发送请求

3服务器接收

4服务器返回

5客户端接收

6修改客户端页面内容。

只不过这个过程是异步的。

A  初始化XMLHttpRequest对象

function   createXmlHttpRequest(){

   var xmlHttp;

   try{    //Firefox, Opera 8.0+, Safari

           xmlHttp=new XMLHttpRequest();

    }catch (e){

           try{    //Internet Explorer

                  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

            }catch (e){

                  try{

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

                  }catch (e){}  

           }

    }

   return xmlHttp;

 }

B、 指定响应处理函数

1指定当服务器返回信息时客户端的处理方式。只要将相应的处理函数名称赋给XMLHttpRequest对象的onreadystatechange属性就可以了.比如: 

        XMLHttpReq.onreadystatechange = processResponse;

2注意:这个函数名称不加括号,不指定参数。也可以用Javascript函数直接量方式定义响应函数。比如:

       XMLHttpReq.onreadystatechange = function() { };

// 处理返回信息的函数

function   processResponse() {

}

C发出HTTP请求 

1向服务器发出HTTP请求了。这一步调用XMLHttpRequest对象的opensend方法。

     http_request.open('GET', 'http://www.example.org/some.file', true);

     http_request.send(null)

2按照顺序,open调用完毕之后要调用send方法。send的参数如果是以Post方式发出的话,可以是任何想传给服务器的内容。

3注意:如果要传文件或者Post内容给服务器,必须先调用setRequestHeader方法,修改MIME类别。如下:

4http_request.setRequestHeader(Content-Type,application/x-www-form-urlencoded);

    这时资料则以查询字符串的形式列出,作为send的参数,例如:

    name=value&anothername=othervalue&so=on

//发送请求

function sendRequest(){

//获取文本框的值

var chatMsg=input.value;

var url="chatServlet.do?charMsg="+chatMsg;

//建立对服务器的调用

XMLHttpReq.open("POST",url,true);

//设置MiME类别,如果用 POST 请求向服务器发送数据,

//需要将"Content-type" 的首部设置为 "application/x-www-form-urlencoded".

//它会告知服务器正在发送数据,并且数据已经符合URL编码了。

XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//状态改变的事件触发器,客户端的状态改变会触发readystatechange事件,

//onreadystatechange会调用相应的事件处理函数

XMLHttpReq.onreadystatechange=processResponse;

//发送数据

XMLHttpReq.send(null);

}

D、处理服务器返回的信息 

处理响应处理函数都应该做什么。 

  首先,它要检查XMLHttpRequest对象的readyState值,判断请求目前的状态。参照前文的属性表可以知道,readyState值为4的时候,代表服务器已经传回所有的信息,可以开始处理信息并更新页面内容了。如下:

if (http_request.readyState == 4) {

    // 信息已经返回,可以开始处理

} else {

    // 信息还没有返回,等待

}

  服务器返回信息后,还需要判断返回的HTTP状态码,确定返回的页面没有错误。所有的状态码都可以在W3C的官方网站上查到。其中,200代表页面正常。

if (http_request.status == 200) {

      // 页面正常,可以开始处理信息

} else {

    // 页面有问题

}

1XMLHttpRequest对成功返回的信息有两种处理方式:

2responseText:将传回的信息当字符串使用;

3responseXML:将传回的信息当XML文档使用,可以用DOM处理。 

//处理返回信息的函数

function processResponse(){

   if(XMLHttpReq.readyState==4){ //判断对象状态 4代表完成

           if(XMLHttpReq.status==200){ //信息已经成功返回,开始处理信息

                  document.getElementById("chatArea").value=XMLHttpReq.responseText;

          }

   }

      }

15、数据格式提要

1在服务器端 AJAX 是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。

2从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言只能以如下 种格式返回数据:

XML

JSON

HTML

16、XML

优点:

XML 是一种通用的数据格式。

不必把数据强加到已定义好的格式中,而是要为数据自定义合适的标记。

利用 DOM 可以完全掌控文档。

缺点:

如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么 responseXML 的值将是空的。

当浏览器接收到长的 XML 文件后, DOM 解析可能会很复杂

17、JSON

1JSONJavaScript Object  Notation)一种简单的数据格式,比xml更轻巧。JSONJavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。 

2JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

   规则如下:

       1)映射用冒号(“:”)表示。名称:

       2)并列的数据之间用逗号(“,”)分隔。名称1:1,名称2:2

       3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:1,名称2:2}

       4) 并列数据的集合(数组)用方括号([])表示。

         [

           {名称1:,名称2:2},

           {名称1:,名称2:2}

         ]

      5  元素值可具有的类型:string, number, object, array, true, false, null 

18、JSON 示例

1JSON 用冒号(而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。

2对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函数,那就是对象的方法。

19解析 JSON

1JSON 只是一种文本字符串。它被存储在 responseText 属性中

2为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 语句。函数 eval 会把一个字符串当作它的参数。然后这个字符串会被当作 JavaScript 代码来执行。因为 JSON 的字符串就是由 JavaScript 代码构成的,所以它本身是可执行的

3代码实例:

20、JS处理JSON

例子一:

 <script language="JavaScript">

     var people ={"firstName": "Brett", "lastName":"McLaughlin", 

                                                        "email": "brett@newInstance.com" };

     alert(people.firstName);

     alert(people.lastName);

     alert(people.email);

 </script>

例子二:

 <script language="JavaScript">

      var people =[

                     {"firstName": "Brett","email": "brett@newInstance.com" },

                     {"firstName": "Mary","email": "mary@newInstance.com" }

                ];

    alert(people[0].firstName);

    alert(people[0].email);

    alert(people[1].firstName);

    alert(people[1].email); 

 </script>

例子三

<script language="JavaScript">

     var people ={

            "programmers":

              [

                {"firstName": "Brett", "email": "brett@newInstance.com" },

                {"firstName": "Jason", "email": "jason@servlets.com" }

              ]

};

window.alert(people.programmers[0].firstName);

window.alert(people.programmers[1].email);

 </script>

例子五

 <script language="JavaScript">

      var people ={

             "username":"mary",

             "age":"20",

             "info":{"tel":"1234566","celltelphone":788666},

             "address":[

                     {"city":"beijing","code":"1000022"},

                     {"city":"shanghai","code":"2210444"}

              ]

        };

      window.alert(people.username);

      window.alert(people.info.tel);

      window.alert(people.address[0].city);

 </script>

21、JSON 小结

优点:

作为一种数据传输格式,JSON 与 XML 很相似,但是它更加灵巧。

JSON 不需要从服务器端发送含有特定内容类型的首部信息。

缺点:

语法过于严谨

代码不易读

eval 函数存在风险

22解析 HTML

 1HTML 由一些普通文本组成。如果服务器通过 XMLHttpRequest 发送 HTML, 文本将存储在 responseText 属性中。

2不必从 responseText 属性中读取数据。它已经是希望的格式,可以直接将它插入到页面中。

3插入 HTML 代码最简单的方法是更新这个元素的 innerHTML 属性。

23、HTML 小结

优点:

从服务器端发送的 HTML 代码在浏览器端不需要用 JavaScript 进行解析。

HTML 的可读性好。

HTML 代码块与 innerHTML 属性搭配,效率高。

缺点:

若需要通过 AJAX 更新一篇文档的多个部分,HTML 不合适(拆串)

innerHTML 并非 DOM 标准。

24、对比小结

1若应用程序不需要与其他应用程序共享数据的时候使用 HTML 片段来返回数据时最简单的

2如果数据需要重用, JSON 文件是个不错的选择其在性能和文件大小方面有优势

3当远程应用程序未知时, XML 文档是首选因为 XML 是 web 服务领域的 “世界语”

【上篇】
【下篇】

抱歉!评论已关闭.