Ajax

AJAX

概论:

w   AJAX指异步的JavaScript及XML(Asynchronous JavaScriptAnd XML)

w   允许浏览器与服务器通信而无须刷新页面的技术都被叫做AJAX

w   AJAX不是编程语言,而是创建更好更快以及交互性更强的Web应用程序的技术

w   通过使用AJAX可实现页面局部数据更新,而不是整个页面的跳转

        

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

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

AJAX缺点:

1)        AJAX大量使用了JavaScript和AJAX引擎,而这个取决于浏览器的支持.

有些支持但是提供的XMLHttpRequest的方式不一样,所以使得AJAX

程序必须测试针对各个浏览器的兼容性.

2)        AJAX更新页面内容的时候没有刷新整个页面,因此,网页的后退功能是失效的,

有的用户还经常搞不清楚现在的数据时旧的还是已经更新过的.

3)        对流某提的支持没有FLASH,JavaApplet好.

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

 

工作流程:

w   JavaScript使用XMLHttpRequest对象来直接与服务器进行通信,异步数据传输;

w   从服务器请求少量的所需信息,问不是整个页面内容,减少服务器压力

AJAX关键元素及作用:

         关键元素

Ÿ  JavaScript

Ÿ  DOM(文档对象模型)

Ÿ  CSS样式表

Ÿ  XMLHttpRequest --核心对象

作用:

Ÿ  Web2.0的主要开发技术

Ÿ  异步方式发送请求

Ÿ  实现页面局部刷新

Ÿ  提升用户体验

 

AJAX实现步骤:

1.        创建XMLHttpRequest对象

2.        设置回调函数

3.        初始化XMLHttpRequest组件

4.        发送请求

 

AJAX实例

         点击加载按钮,不刷新页面获取服务器端的内容并显示在页面中

         //JS

         function getXmlHttp(){…} //获取XMLHttp对象

 

         xmlHttp.readyState == 4 &&xmlHttp.status ==200   //HTTP状态验证

         xmlHttp.open(“GET” , ”data.txt” , true);    //创建http请求

         xmlHttp.send();  //发送请求

 

XMLHttpRequest对象

         作用:

                   实现以异步方式在客户端与服务器端之间传递数据.

                   减轻服务器负担,加快响应速度,缩短用户等待时间

         浏览器创建XMLHttpReuest对象的差异

u  XMLHttpRequest对象

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

1)        responseText: 将传回来的信息当字符串使用;

2)        responseXML: 将传回来的信息当XML文档使用;

u  Activex对象

 

//兼容写法

//如果是IE7+,FF等高级浏览器

if(window.XMLHttpRequest){

         returnnew XMLHttpRequest();

}

//如果是IE 5,IE 6 低版本浏览器

if(window.ActiveXObject){

         returnnew ActiveObject(“Microsoft.XMLHTTP”);

}

XMLHttpRequest对象属性

        

 

XMLHttpRequest对象方法

使用AJAX发送请求及处理相应

n  发送请求的方式:GET方式和POST方式

n  处理响应的方法:文本相应和XML响应

1)        //创建XMLHttpRequest对象

 

2)        设置回调函数

 

xmlHttp.onreadystatechange =function(){

if(xmlHttp.readyState ==4 &&xmlHttp.status == 200){

     //根据不同的返回类型处理响应

}

}

3)        初始化XMLHttpRequest组件

xmlHttp.open(type , url , asunc);

4)        发送请求

xmlHttp.send(String);

 

         GET请求和POST请求区别

        

 

文本和XML方式响应的区别

        

数据格式提要:

从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式发送,

服务器端的编程语言只能以如下3种格式返回数据:

    * XML;

           *JSON;

           *HTML;

xml :

        优点:

                   *XML是一种通用的数据格式;

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

                    * 利用DOM可以完全掌控文档.

         缺点 :

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

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

                  

JSON:

       优点:

                   *作为一种数据传输的格式,JSON与XML很相似,但JSON更加灵巧;

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

         缺点:

                   *语法过于严谨;

                   *代码不易读;

                   *eval函数存在风险

 

HTML:

         优点:

                   *  从服务器端发送的HTML代码在浏览器端不需要javaScript进行解析;

                   *  HTML的可读性好;

                   *  HTML代码与innerHTML属性搭配,效率高;

         缺点:

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

                   *  innerHTML并非DOM标准

 

对比小结:

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

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

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

Jquery实现AJAX

         $.ajax()方法

        

         $.ajax({

                   url : ”发送请求地址”,

                   type : ”请求方式”,

                   date : ”要发送的数据”,

                   dataType : ”服务器返回的数据类型”,

                   beforeSend : function(data){ //发送请求前执行的代码},

success : function(data){ //发送成功后执行的代码},

error : function(){ //请求失败执行的代码}

});

$.get()方法

         通过远程HTTP GET 请求载入信息

         是$.ajax()方法中类型为GET请求的简化版

         $.get(

                   发送请求的地址,

                  要发送的数据  key/value,

                   回调函数,

                   “返回内容格式,xml,html,script,json,text”

);

*get(url,data,callback,type)

        *   url:请求路径

        * data:请求数据,key/value刑事,json数据格式  

        * callback:function(data,texStatus,XMLHttpRequest){} 

              * data:代表请求返回内容,可以是XML文档,JSON,HTML,片段

              * textStatus:代表请求状态,其值可能为:

succuss,error,notmodify,timeout4

              * type:返回内容格式,xml,html,script,json,text

        * 返回值:XMLHttpRequest

  

        *   get()方法无论发送不发送请求数据,请求类型都是”GET”方式

        

         $.post()方法

                   通过远程HTTP POST请求载入信息

                   是$.ajax()方法中类型为POST请求的简化版

                   $.post(

                            发送是请求地址,

                            要发送的数据 key/value,

                            回调函数,

                            “返回内容格式,xml.html,script,json,text”

);

);

*get(url,data,callback,type)

       *   url:请求路径

       * data:请求数据,key/value刑事,json数据格式  

       * callback:function(data,texStatus,XMLHttpRequest){} 

             * data:代表请求返回内容,可以是XML文档,JSON,HTML,片段

             * textStatus:代表请求状态,其值可能为:

succuss,error,notmodify,timeout 4

             * type:返回内容格式,xml,html,script,json,text

       * 返回值:XMLHttpRequest

  

        *   post()方法无论发送不发送请求数据,请求类型都是”POST”方式

         $.getJSON()方法

                   通过HTTP GET请求载入JSON数据

                   是$.get()方法中返回数据类型为JSON的简化版

                   $.getJSON(

                            发送请求地址,

                            要发送的数据 key/value,

                            回调函数

);

         $.getScript()方法

                   通过HTTP GET 求情载入并执行一个JavaScript文件

                   $.getScript(

                            要发送的请求地址,

                            回调函数

);

         serialize() 用于序列化表单将DOM元素内容序列化为字符串用于AJAX请求

                   $(“form”).serialize();

                   //返回参数序列

                   single= Single&check = check2 & radio = radio1

         好处: 不用逐个去获取表单元素的值,拼凑参数序列

         );

*get(url,data,callback,type)

       *   url:请求路径

       * data:请求数据,key/value刑事,json数据格式  

       * callback:function(data,texStatus,XMLHttpRequest){} 

             * data:代表请求返回内容,可以是XML文档,JSON,HTML,片段

             * textStatus:代表请求状态,其值可能为:

succuss,error,notmodify,timeout 4

             * type:返回内容格式,xml,html,script,json,text

       * ajax总结:

         * 同步交互和异步交互:

                   * 同步交互:客户端发送请求——>等待服务器端处理——>接收响应,这个过程客

                                               户端不能做任何其他事情,这种模式叫做同步交互

                   * 异步交互:客户端发送请求——>等待服务器端处理——>接收响应,这个过程客

                                               户端不用等待结果,可以做其他事情,这种模式叫做异步交互

                  

         * ajax的定义:允许客户端与服务器进行通信,而无须刷新整个页面的技术叫做ajax。

        

         * 对比传统web模式与ajax模式的区别:

                   * 传统web模式:客户端与服务器通信,交互的是整个页面

                   * ajax模式:客户端与服务器通信,交互的是数据层面的

                  

         * ajax的工作原理:在客户端与服务器进行通信的时候,客户端的请求首先发送给"ajax

                                               引擎",再由"ajax引擎"发送到服务器端

        

         * XMLHttpRequest对象:是使用ajax技术的关键

        

         * 实现ajax的步骤:

                    1) 创建XMLHttpRequest对象

                    2) 注册监听

                            * 利用XMLHttpRequest对象的onreadystatechange属性监听服务器通信状态.

                            * 服务器的通信状态具体由XMLHttpRequest对象的readyState属性来获取

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

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

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

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

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

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

                            * 再利用XMLHttpRequest对象的另一个属性status,来获取访问服务器端是

                              否正确

                                     * 常用状态码及其含义:

                                               404 没找到页面(not found)

                                               403 禁止访问(forbidden)

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

                                               200 一切正常(ok)

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

                                                        有被修改 )

                           

                    3) 接收服务器的响应数据:

                                     * 文本格式:利用XMLHttpRequest对象的responseText属性来接收;

                                     * xml格式:利用XMLHttpRequest对象的responseXML属性来接收;

                                     * json格式:利用XMLHttpRequest对象的responseText属性来接收,再利

                                                           用eval()函数进行转换。

                                               * 利用"{}"开始和结尾的,相当于map集合

                                               * 利用"[]"开始和结尾的,相当于数组

                                              

                   4) 与服务器建立连接

                            * 利用XMLHttpRequest对象的open(method,url,asynch)方法

                                     * method:请求类型,"GET"或者"POST"

                                     * url:请求路径

                                     * asynch:是否异步加载,true是异步加载

                                    

                   * 如果请求类型时"POST"方式的话,需要设置请求首部信息

                            * 利用XMLHttpRequest对象的setRequestHeader()方法

                                     *xhr.setRequestHeader("Content-type","application/x-www-form-urlencode")

                                    

                   5) 向服务器发送请求数据

                            * 利用XMLHttpRequest对象的send()

                                     * 如果是"GET"请求类型的话,send()方法向服务器发送请求数据,服务器接收不到

                                     * 如果是"POST"请求类型的话,send()方法向服务器发送请求数据,服务器可以接收

                  

                   * 服务、服务器、中间件、servlet:

                            * 服务:发布后的工程

                            * 服务器:硬件承载容器,实际上就是电脑硬件

                            * 中间件:tomcat、weblogic[oracle]、webshpere[IBM]

                            * servlet:服务上,具体处理相关内容的文件

                                                       

使用jQuery+AJAX 解析XML文件加入二级联动中:

<?xml version="1.0"encoding="GB2312"?>

<china>

         <provincename="吉林省">

                   <city>长春</city>

                   <city>吉林市</city>

                   <city>四平</city>

                   <city>松原</city>

                   <city>通化</city>

         </province>

         <provincename="辽宁省">

                   <city>沈阳</city>

                   <city>大连</city>

                   <city>鞍山</city>

                   <city>抚顺</city>

                   <city>铁岭</city>

         </province>

         <provincename="山东省">

                   <city>济南</city>

                   <city>青岛</city>

                   <city>威海</city>

                   <city>烟台</city>

                   <city>潍坊</city>

         </province>

</china> 

 

<select id="province" name="province">

      <option value="">请选择....</option>

    </select>

          <select id="city"name="city">

                 <optionvalue="">请选择.....</option>

          </select>

 </body>

         <scriptlanguage="JavaScript">

                           

                            /*

                             * jquery通过$.get()或者$.post()方法来解析并加载xml文件

                             *

                             *   * 以$.get(url,callback)方法为例

                             *             *url:要解析的xml文件的路径

                             *             *callback:回调函数,function(xml){}

                             *                      *xml:解析后的内容

                             */

                            $.get("cities.xml",function(xml){

                                     vardocXml = xml;

                                    

                                     //在jquery中使用标签名来查找对应标签,

                                     //利用find()方法,传入标签名

                                     //$(docXml)--将解析回来的xml进行包装

                                     var$provinceXmlElements = $(docXml).find("province");

                                     //遍历  

                                     $provinceXmlElements.each(function(index,domEle){

                                               //有name属性的每一个标签

                                               var$provinceXmlValue = $(domEle).attr("name");

                                              

                                               /*加入到第一个下拉选中

                                                * <select id="province"name="province">

                                                      <option value="">请选择....</option>

                                                    </select>

                                                */

                                                //创建option标签

                                               var$option = $("<option></option>");

                                               //设置属性value,省份名称

                                               $option.attr("value",$provinceXmlValue);

                                               //加文本内容,省份

                                               $option.text($provinceXmlValue);

                                               //获取页面province

                                               var$provinceElement = $("#province");

                                               //添加到第一个下拉框

                                               $provinceElement.append($option);

                                    });

                                    

                                     $("#province").change(function(){

                                               //获取页面的元素(选中内容)

                                               var$provinceValue = $("#province").val();

                                              

                                               /*

                                                * <select id="city"name="city">

                                                                <optionvalue="">请选择.....</option>

                                                                <optionvalue="长春">长春</option>

                                                         </select>

                                                */

//                                           $("#cityoption[value!='']").each(function(index,domEle){

//                                                     $(domEle).remove();    //可以用遍历清空  

//                                           });

                                               //清空:除请选择以外的所有

                                               $("#cityoption[value!='']").remove();

                                               //遍历xml

                                               $provinceXmlElements.each(function(index,domEle){

                                                        var$provinceXmlValue = $(domEle).attr("name");

                                                        //如果页面省份名称等于xml省份名称(找到了)

                                                        if($provinceValue==$provinceXmlValue){

                                                                 //根据省份查找下面所有city

                                                                 var$cityXmlELements = $(domEle).find("city");

                                                                 //遍历,获取文本内容

                                                                 $cityXmlELements.each(function(index,domEle){

                                                                           var$cityXmlValue = $(domEle).text();

                                                                          

                                                                           /*加入到第二个下拉选中

                                                                            * <select id="city"name="city">

                                                                                            <optionvalue="">请选择.....</option>

                                                                                     </select>

                                                                            */

                                                                           var$option = $("<option></option>");

                                                                           //设置属性

                                                                           $option.attr("value",$cityXmlValue);

                                                                           //设置文本

                                                                           $option.text($cityXmlValue);

                                                                          

                                                                           var$cityElement = $("#city");

                                                                           $cityElement.append($option);

                                                                 });

                                                        }

                                               });

                                     });

                            });

         </script>

原文地址:https://www.cnblogs.com/dooor/p/5252256.html