• 传统的JavaScript实现的Ajax 与 JQuery封装的Ajax


    一、传统的JavaScript实现的Ajax

    步骤:

    1. 声明一个对象用来装入XMLHttpRequest对象

    2. 给XMLHttpRequest对象赋值

    3. 实例化成功后,使用open()方法初始化XMLHttpRequest对象

    4. 回调事件,当它的readyState值改变时会激发一个readystatechange事件

    5. 使用send()方法发送该请求

    <script type="text/javascript">

      function Ajax(){

        var xmlHttpReq  = null;

        if(window.ActiveXObject){    //IE5 IE6 是以ActiveXObject的方式引入XMLHttpRequest对象的

          xmlHttpReq = new Active XObject("Microsoft.XMLHTTP");

        }

        else if (window.XMLHttpRequest){   //除IE5 IE6 以外的浏览器,XMLHttpRequest是window的子对象

          xmlHttpReq = new XMLHttpRequest(); //实例化一个XMLHttpRequest对象

        }

        xmlHttpReq.open("GET","test.aspx",true); //调用open()方法并采用异步方式,使用get方式传递参数时用test.aspx?name=Jack.

          xmlHttpReq.onreadystatechange = RequestCallBack; //设置回调函数

        xmlHttpReq.send(null); //因为使用GET方法提交,所以可以使用null作为参数  

         }

      function RequestCallBack(){  //一旦readyState值改变,将会调用该函数

        if(xmlHttpReq.readyState == 4){  //请求完成加载

          if(xmlHttpReq.status == 200){ //响应已经成功

            document.getElementById("resText").innerHTML = xmlHttpReq.responseText;

          }

        }  

      }

    </script>

    <input type="button" value="Ajax提交" onclick="Ajax();"/>

    <div id="resText"></div>

    ------------------

    使用Post提交时,需要设置请求头部

       xmlHttpReq.open("POST","test.aspx",true); //调用open()方法并采用异步方式

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

       xmlHttpReq.send("name=Jack&pwd=123"); //因为使用POST方法提交,参数是放在send方法里的

    后台返回数据后调用此方法:

            xmlHttpReq.onreadystatechange =RequestCallBack; //设置回调函数

    -------------------------------------------------------------

    因为XMLHttpRequest对象的很多属性和方法,对于想快速入门Ajax的人来收,并不是个容易的过程。为了开发人员能够将程序开发集中在业务和用户体验上,而不用去理会那些繁琐的XMLHttpRequest对象,于是有了下面的Jquery中的Ajax。

    -------------------------------------------------------------

    JQuery中的Ajax

    JQuery对Ajax操作进行了封装,在JQuery中$.ajax()方法属于最底层的方法,

    第2层是load()、$.get() 和$.post()方法,

    第3层是$.getScript()和$.getJSON()方法。

    ---------

    1. load()方法是JQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中。

    load(url [,data] [,callback]);后两个参数是可选的

    --load()方法的传递方式根据参数data来自动指定。如果没有这个参数,则采用GET方式传递;反之,为POST方式。

    JQuery代码如下:

    $(function(){

      $("#send").click(function(){

        $("#resText").load("test.html");

      });

    });

    <input type="button" id="send" value="Ajax获取"/>

    <div id="resText"></div>

    test.html页面的HTML内容会被加载并插入<div id="resText"></div>的元素中。

    --如果只需要加载test.html页面内的某些元素,那么可以使用load()方法的URL参数来达到目的。

    load()方法的URL参数的语法结构为:"url selector"。注意,url和选择器之间有一个空格。

    例如只需要加载test.html页面中class为“para”的内容,则可以

    $("resText").load("test.html  .para");

    //无data参数传递,是GET方式

    $("#resText").load("test.aspx",function(){

      //...

    });

    //有data参数传递,则是POST方式

    $("#resText").load("test.aspx",{name:"rain",age:"22"},function(){

      //...

    });

    --回调函数

    $("#resText").load("test.html",function(responseText, textStatus, XMLHttpRequest){

      // responseText:  请求返回的内容

      //textStatus :  请求状态:success、error、notmodified、timeout

      // XMLHttpRequest :    XMLHttpRequest对象

    });

    2. $.get() 方法

    load()方法通常用来从Web服务器上获取静态的数据文件,如果需要传递一些参数给服务器中的页面,那么可以使用$.get()或者$.post()方法。

    $.get()方法使用GET方式来进行异步请求。

    结构为:$.get( url [, data] [,callback] [, type] )

    参数说明:callback,只有当Response的返回状态是success才调用该方法。

                  type,类型是String,服务器端返回内容的格式,包括xml、html、script、json、text和_default

    返回不同的数据格式有不同的处理方法:

     (1)返回HTML格式

       $(function(){

        $("#send").click(function(){

          $.get("test.aspx",{

            username:$("#username").val(),

            content:$("#content").val()

          },function(data, textStatus){

            $("#resText").html(data); //将返回的数据添加到页面上

          });

        });

     })

     (2)XML文档

      由于服务器端返回的数据格式是XML文档,因此需要对返回的数据进行处理,处理XML文档与处理HTML文档一样,也可以使用常规的attr()、find()、filter()以及其他方法。

    $(function(){

        $("#send").click(function(){

          $.get("test.aspx",{

            username:$("#username").val(),

            content:$("#content").val()

          },function(data, textStatus){

            var username= $(data).find("comment").attr("username");

            var content = $(data).find("comment content").text();

            var txtHtml = "<div class='comment'>"+username+"<p class='para'>"+content+"</p></div>";

            $("#resText").html(txtHtml); //将处理后的数据添加到页面上

          });

        });

     })

    由于要服务器端返回的数据格式是XML文档,因此需要在服务端设置Content-Type类型为text/xml

    (3) JSON文件

    之所以出现这种数据格式的文件,很大程度上是因为XML文档体积大和难以解析。JSON文件和XML文档一样,也可以方便的被重用。

    也需要对返回的JSON数据进行处理,才可以将新的HTML数据添加到主页面中。

    $(function(){

        $("#send").click(function(){

          $.get("test.aspx",{

            username:$("#username").val(),

            content:$("#content").val()

          },function(data, textStatus){

            var username = data.username;

            var content = data.content;

            var txtHtml = "<div class='comment'>"+username+":<p class='para'>"+content+"</p></div>";

            $("#resText").html(txtHtml); //将返回的数据添加到页面上

          },"json");

        });

     })

    将第4个参数设置为“json”来代表服务器端返回的数据格式。
    -------------------------------------------
    3种数据格式的优缺点:
    当不需要与其他应用程序共享数据时,使用html来提供返回数据;
    如果数据需要重用,那么使用JSON文件,它在性能和文件大小方面具有优势;
    而当远程应用程序未知时,XML文档是明智的选择,它是Web服务领域的“世界语”。
    -------------------------------------------

    3. $.post()方法

    $(function(){

        $("#send").click(function(){

          $.post("test.aspx",{

            username:$("#username").val(),

            content:$("#content").val()

          },function(data, textStatus){

            $("#resText").append(data); //将返回的数据添加到页面上

          });

        });

     })

    另外,当load()方法带有参数传递时,会使用POST方式发送请求,因此可以用load()方法来完成相同的功能。

    $(function(){

      $("#send").click(function(){

        $("#resText").load("test.aspx",{

          username:$("#username").val(),

          content:$("#content").val()

        })

      }) 

    })

    上面使用load()、$.get()和$.post()方法完成了一些常规的Ajax程序,如果还需要编写一些复杂的Ajax程序,就要用到JQuery中的$.ajax()方法。

    $.ajax()方法不仅能实现上面的方法的功能,而且还可以设定beforeSend(提交前回调函数)、error(请求失败后处理)、success(请求成功后处理)、complete(请求完成后处理)回调函数,通过这些回调函数,可以给用户更多的Ajax提示信息。

    4. $.getScript()

    有时候,在页面初次加载时就取得所需的全部JavaScript文件是完全没有必要的。虽然可以在需要哪个Javascript文件时,动态地创建<script>标签,

    $(document.createElement("script")).attr("src","test.js").appendTo("head");或者

    $("<script type='text/javascript' src='test.js'/>").appendTo("head");

    但这种方式并不理想,为此,JQuery提供了$.getScript()方法来直接加载.js文件。加载完后会自动运行里面的函数。

    $(function(){

      $('#send').click(function(){

        $.getScript('test.js');

      });

    })

    $.getScript()方法也有回调函数,它会在JavaScript文件成功载入后运行。例如想载入JQuery官方颜色动画插件(jquery.color.js).

    $(function(){

      $.getScript('/jquery.color.js',function(){

        $("#go").click(function(){

          $(".block").animate({backgroundColor:'pink'},1000)

                .animate({backgroundColor:'blue'},1000);

        });

      });

    })

    当jquery.color.js动画插件加载完毕后,单击id为“go”的按钮时,class为block的元素就有了颜色动画变化。

    5. $.getJSON()

    $.getJSON()方法用于加载JSON文件,与$.getScript()方法的用法相同。

    $(function(){

      $("#send").click(function(){

        $.getJSON('test.json',function(data){

          //data:返回的数据

        });

      });

    })

    用$.each()处理返回的数据:

    $(function(){

      $("#send").click(function(){

        $.getJSON('test.json',function(data){

          $('#resText').empty();

          var html = '';

          $.each(data,function(commentIndex, comment){

            html +='<div >'+comment['username']+':<p>'+comment['content']+'</p></div>';

          });

          $('#resText').html(html);

        });

      });

    })

    6. $.ajax()方法

    是jquery最底层的Ajax实现。它的结构为:

    $.ajax(options) ,参数以key/value的形式存在,所有参数都是可选的。

    常用参数:

    参数名称          类型                                  说明

    url                 String                               

    type               String

    timeout          Number

    data               Object或String

    dataType         String

    beforeSend      Function

    complete         Function

    success           Function

    error               Function

    global              Boolean

    --------------------------

    因为$.ajax()方法是最底层的Ajax实现,因此可以用它来代替前面的所有方法。
    例如,可以代替$.getScript()方法
    $(function(){
         $('#send').click(function(){
              $.ajax({
                   type: "GET",
                   url: "test.js",
                   dataType: "script"
              });
         });
    })
    例如,可以代替$.getJSON()方法:
    $(function(){
         $('#send').click(function(){
              $.ajax({
                   type: "GET",
                   url: "test.json",
                   dataType: "json",
                   success : function(data){
                        $('#resText').empty();
                        var html='';
                        $.each(data, function(commentIndex,comment){
                             html+= '<div>'+comment['username']+':<p>'+comment['content']+'</p></div>';
                        });
                        $('#resText').html(html);
                   }
              });
         });
    })
     
    -------------------------------------
    序列化元素
    1. serialize()方法
    使用$.get()和$.post()方法的时候,data参数少量还可以一个一个添加进去,但如果表单元素越来越复杂,使用这种方式在增大工作量的同时也使表单缺乏弹性。于是JQuery为这一常用的操作提供了一个简化的方法--serialize().
    $('#send').click(function(){
         $.get("test.aspx", $("#form1").serialize(), function(data,textStatus){
              $("#resText").html(data);
         });
    });
     
    需要再说明一下,data参数的几种形式:
    (1) {
              username : $("#username").val(),
              content : $("#content").val()
          }
    (2)字符串格式
        " username="+encodeURIComponent( $('#username').val()) + "&content=" + encodeURIComponent( $('#content').val() )
    (3) serialize()方法不仅表单可以使用它,其他选择器选取的元素也可使用它。
         $(":checkbox , :radio").serialize();
        把复选框和单选框的值序列化为字符串形式。
  • 相关阅读:
    GrapeCity Documents (服务端文档API组件) V3.0 正式发布
    js 手机号码正则表达式
    springMvc 注解@JsonFormat 日期格式化
    solr java代码
    solr全文检索
    在阿里云服务器CentOS7安装mysql提示“No package mysql-server available上安装mysql遇到的问题
    MockBean 单元测试
    redis缓存
    c3p0连接池
    springboot Transactional事务的使用
  • 原文地址:https://www.cnblogs.com/chay1227/p/2846578.html
Copyright © 2020-2023  润新知