• Java Ajax入门


    接下来整理一下Ajax相关的内容,AJAX(asynchronous js and xml),即异步的JavaScript和xml,它的主要作用就是让页面不必等待服务器返回整个页面信息,而可以通过异步的方式给服务器发送数据和获取数据,对页面进行局部刷新,是一种提高用户体验的技术。

    同步和异步

    同步和异步的主要区别如下;

    (1)同步:一个响应结束后才能发送下一个请求,页面在请求期间不能做其他事情。

    (2)异步:不必等待一个响应结束,可以异步的给服务器发送请求,页面在异步请求期间可以继续操作,可以对页面进行局部刷新。

    异步是一种提高用户体验的技术,它可以减轻服务器的压力,减少网络传输,但是另外一方面可能会无端增加无效请求,反倒给服务器造成压力,因此异步技术也是一个双刃剑。

    Ajax的使用

    Ajax的使用,本质是使用XmlHttpRequest对象给服务器发送请求和获取数据,通过JavaScript和JQuery都可以使用它,下面简单的介绍下如何使用Ajax。

    JavaScript方法

    (1)获取Ajax对象

    JavaScript获取Ajax对象,需考虑到不同版本的浏览器获取的方式,现在主流浏览器是内置了XmlHttpRequest对象的,可以直接获取到,下图就是在chrome浏览器console控制台直接获取的方式,可以看到可以正常获取。IE浏览器比较麻烦一点,具体参考如下代码。

    获取XmlHttpRequest的js脚本。

     1 /*获取XmlHttpRequest*/
     2 function getAjax(){
     3     var xmlHttpRequest;
     4     /*如果是chrome,火狐,safari,IE7以上等主流浏览器*/
     5     try{
     6         xmlHttpRequest=new XMLHttpRequest();
     7     }catch (e) {
     8         try{
     9             /*是否是IE6*/
    10             xmlHttpRequest=new ActiveXObject("Msxml2.XMLHTTP");
    11         }catch (e) {
    12             try{
    13                 /*IE5或者更早版本*/
    14                 xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
    15             }catch(e){
    16                 /*抛出异常提示*/
    17                 alert("不存在XmlHttpRequest的浏览器");
    18                 throw e;
    19             }
    20         }
    21     }
    22     //将对象返回
    23     return xmlHttpRequest;
    24 }

    测试html页面,用来测试获取ajax对象。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>使用JavaScript测试AJAX</title>
     6     <!--引入ajax脚本-->
     7     <script type="text/javascript" src="js/ajaxjs.js"></script>
     8     <script>
     9         function getAjaxObject(){
    10             /*直接调用脚本*/
    11             var ajaxObject=getAjax();
    12             alert(ajaxObject);
    13         }
    14     </script>
    15 </head>
    16 <body>
    17  <h3>获取XmlHttpRequest</h3>
    18  <input type="button" onclick="getAjaxObject()" value="点击测试获取ajax对象"></input>
    19 </body>
    20 </html>

    IE浏览器结果

    火狐浏览器结果

    chrome浏览器器结果

    (2)使用Ajax对象给服务器发送请求,在上面页面基础上,发送一个请求给服务器,服务器接收到异步请求后,返回给页面一个信息。需要完成以下步骤:

    step1 打开与服务端的连接,使用XmlHttpRequest.open(method,url,async)方法

    step2 发送请求,使用XmlHttpRequest.setRequestHeader("Content-Type","appliction/x-www-form-urlencoded"),并XmlHttpRequest.send()发送数据

    step3 注册监听,使用onreadystatechange状态的变化,会调用函数里的方法,并在函数里对状态进行判断,当readyState==4并且status==200时,才对页面做出处理。

    其中readyState有5个状态,主要用的就是状态4,status就是状态行的状态码,如果200代码返回OK。

    0状态: 表示刚创建XMLHttpRequest对象, 还未调用open()方法
    1状态: 表示刚调用open()方法, 但是还没有调用send()方法发送请求
    2状态: 调用完了send()方法了, 请求已经开始
    3状态: 服务器已经开始响应, 但是不代表响应结束
    4状态: 服务器响应结束!(通常我们只关心这个状态) 
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>使用JavaScript测试AJAX</title>
     6     <style type="text/css">
     7         div{
     8             border: 1px solid dimgrey;
     9             width: 350px;
    10             height: 50px;
    11             margin-top: 10px;
    12             text-align: center
    13         }
    14     </style>
    15     <!--引入ajax脚本-->
    16     <script type="text/javascript" src="js/ajaxjs.js"></script>
    17     <script>
    18         /*获取一个ajax对象*/
    19         function getAjaxObject(){
    20             /*直接调用脚本*/
    21             var ajaxObject=getAjax();
    22             alert(ajaxObject);
    23         }
    24         /*发送请求给服务器*/
    25         function sendRequest(){
    26             /*1 打开与服务器的连接*/
    27             var jsRequest=getAjax();
    28             /**
    29              * open(method,url,async) method即提交方式,一般为GET和POST,url为提交的地址,async代表是否异步(true)还是同步(false)
    30              */
    31             jsRequest.open("GET","/day11-servletConfigContext/GetAjaxResponse?username=clyang&password=123",true);
    32             /*2 发送请求*/
    33             //通知服务器发送的数据是请求参数
    34             jsRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    35             jsRequest.send();
    36             /*3 注册监听*/
    37             jsRequest.onreadystatechange=function () {
    38                 //确认readyState和status
    39                 if(jsRequest.readyState==4){
    40                     if(jsRequest.status==200){
    41                         //得到响应参数,将参数显示在div中
    42                         var result=jsRequest.responseText;
    43                         var mydiv= document.getElementById("mydiv");
    44                         mydiv.innerText=result;
    45                     }
    46                 }
    47             }
    48         }
    49     </script>
    50 </head>
    51 <body>
    52  <h3>获取XmlHttpRequest</h3>
    53  <input type="button" onclick="getAjaxObject()" value="点击测试获取ajax对象"></input>
    54  <input type="button" onclick="sendRequest()" value="发送请求给服务器获取返回数据">
    55  <div id="mydiv"></div>
    56 </body>
    57 </html>

    发送GET请求后服务器端,多次异步请求,服务端都处理了。

    点击第二个按钮后页面显示

    可以看出通过JavaScript和ajax可以正常发送异步请求。 

    JQuery方法

    使用JavaScript方法来发送异步请求比较繁琐,如果是JQuery的话代码会相对简单,下面使用JQuery实现上面同样的需求,依然在上面的html代码中进行扩展。

    (1)$.ajax,执行异步AJAX请求,语法格式如下:

    $.ajax(url,[data],[async],[callback]),具体参数如下:

    url:发送请求地址

    data:发送的数据,较为常用的就是Json

    async:true异步,false同步

    type:提交方式,一般选择POST或GET

    success:请求成功后要执行的函数,函数参数就是服务器返回的数据,可以对数据进行处理添加到元素上去。

    error:请求失败后要执行的函数

     1         /*$.ajax*/
     2         function jqueryAjax1(){
     3             $.ajax({
     4                 "url":"/day11-servletConfigContext/GetAjaxResponse",
     5                 "data":{"username":"clyang","password":"123"},
     6                 /*"dataType":"json",*/
     7                 "type":"GET",
     8                 success: function(result){
     9                     $("#mydiv2").text(result+"来自按钮1");
    10                 },
    11                 error:function (e) {
    12                     alert(e);
    13                 }
    14             });
    15         }

    (2)$.get或$.post,使用AJAX的HTTP GET/POST请求从服务器加载数据,语法格式如下:

    $.get(url,[data],[callback]),具体参数解释参考上面$.ajax。

    1         /*$.get*/
    2         function jqueryAjax2(){
    3             var url="/day11-servletConfigContext/GetAjaxResponse";
    4             var data={"username":"clyang","password":"123"};
    5             $.get(url,data,function(result){
    6                 $("#mydiv2").text(result+"来自按钮2");
    7             });
    8         }

    (3)$(selector).load,从服务器加载数据,并把返回的数据放置到指定的元素中,语法格式如下:

    $(selector).load(url,data,callback),这个可以用在注册提示用户已登录,将结果直接回显到当前元素上面。

    1         /*$(selector).load*/
    2         function jqueryAjax3(){
    3             var url="/day11-servletConfigContext/GetAjaxResponse";
    4             var data={"username":"clyang","password":"123"};
    5             $("#mydiv2").load(url,data,function(result){
    6                 /*默认会自动将服务器返回的结果加载到元素上*/
    7                 alert(result);
    8             });
    9         }

    整体测试代码

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>使用JavaScript/JQuery测试AJAX</title>
      6     <style type="text/css">
      7         div{
      8             border: 1px solid dimgrey;
      9             width: 350px;
     10             height: 50px;
     11             margin-top: 10px;
     12             text-align: center
     13         }
     14     </style>
     15     <!--引入ajax脚本-->
     16     <script type="text/javascript" src="js/ajaxjs.js"></script>
     17     <script>
     18         /*获取一个ajax对象*/
     19         function getAjaxObject(){
     20             /*直接调用脚本*/
     21             var ajaxObject=getAjax();
     22             alert(ajaxObject);
     23         }
     24         /*发送请求给服务器*/
     25         function sendRequest(){
     26             /*1 打开与服务器的连接*/
     27             var jsRequest=getAjax();
     28             /**
     29              * open(method,url,async) method即提交方式,一般为GET和POST,url为提交的地址,async代表是否异步(true)还是同步(false)
     30              */
     31             jsRequest.open("GET","/day11-servletConfigContext/GetAjaxResponse?username=clyang&password=123",true);
     32             /*2 发送请求*/
     33             //通知服务器发送的数据是请求参数
     34             jsRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     35             jsRequest.send();
     36             /*3 注册监听*/
     37             jsRequest.onreadystatechange=function () {
     38                 //确认readyState和status
     39                 if(jsRequest.readyState==4){
     40                     if(jsRequest.status==200){
     41                         //得到响应参数,将参数显示在div中
     42                         var result=jsRequest.responseText;
     43                         var mydiv= document.getElementById("mydiv");
     44                         mydiv.innerText=result;
     45                     }
     46                 }
     47             }
     48         }
     49     </script>
     50     <!--引入JQuery-->
     51     <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
     52     <!--使用JQuery完成js的需求-->
     53     <script type="text/javascript">
     54         /*$.ajax*/
     55         function jqueryAjax1(){
     56             $.ajax({
     57                 "url":"/day11-servletConfigContext/GetAjaxResponse",
     58                 "data":{"username":"clyang","password":"123"},
     59                 /*"dataType":"json",*/
     60                 "type":"GET",
     61                 success: function(result){
     62                     $("#mydiv2").text(result+"来自按钮1");
     63                 },
     64                 error:function (e) {
     65                     alert(e);
     66                 }
     67             });
     68         }
     69         /*$.get*/
     70         function jqueryAjax2(){
     71             var url="/day11-servletConfigContext/GetAjaxResponse";
     72             var data={"username":"clyang","password":"123"};
     73             $.get(url,data,function(result){
     74                 $("#mydiv2").text(result+"来自按钮2");
     75             });
     76         }
     77         /*$(selector).load*/
     78         function jqueryAjax3(){
     79             var url="/day11-servletConfigContext/GetAjaxResponse";
     80             var data={"username":"clyang","password":"123"};
     81             $("#mydiv2").load(url,data,function(result){
     82                 /*默认会自动将服务器返回的结果加载到元素上*/
     83                 alert(result);
     84             });
     85         }
     86     </script>
     87 
     88 </head>
     89 <body>
     90  <!--<h3>获取XmlHttpRequest</h3>
     91  <input type="button" onclick="getAjaxObject()" value="点击测试获取ajax对象"></input>
     92  <input type="button" onclick="sendRequest()" value="发送请求给服务器获取返回数据"></input>
     93  <div id="mydiv"></div>-->
     94  <h3>使用JQuery来使用XmlHttpRequest</h3>
     95  <input type="button" onclick="jqueryAjax1()" value="使用$.ajax"></input>
     96  <input type="button" onclick="jqueryAjax2()" value="使用$.get"></input>
     97  <input type="button" onclick="jqueryAjax3()" value="使用$(selector).load"></input>
     98  <div id="mydiv2"></div>
     99 </body>
    100 </html>
    View Code

    测试结果,三种方式均可以发送异步请求,这是只放一个按钮1的执行结果。

     

     以上是对Ajax的部分总结,它有两种方式可以使用,实际开发中一般使用JQuery来使用。 

  • 相关阅读:
    8月份的To-Do List
    Block作为返回值时的使用
    Block作为参数时的使用
    AFNetwork 作用和用法详解
    UIScrollView监听静止的数种情况
    UIAppearance
    自定义Log实现条件编译
    事件的基本概念
    ubuntu16.04下安装MySQL
    在Ubuntu16.04下搭建samba,实现linux与windows之间的资源共享
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11574364.html
Copyright © 2020-2023  润新知