zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    学生管理系统报错(一)
    POJ3264 Balanced Lineup
    MySQL主从复制和读写分离
    身边的同事辞职去旅行
    怎样查看eclipse是32位还是64位
    Mule ESB-3.Build a webservice proxy
    《Head First 设计模式》学习笔记——复合模式
    DecimalFormat格式化输出带小数的数字类型
    黑马day01 笔记
    [Swift]LeetCode835. 图像重叠 | Image Overlap
  • 原文地址:https://www.cnblogs.com/dooor/p/5252256.html
Copyright © 2011-2022 走看看