• 15-Java-Ajax知识整理


    Ajax知识整理

    一、Ajax概念和原理介绍

      AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

        以HttpRequest为核心发送请求和接收响应

        以JavaScript语言为基础使用XMLHttpRequest

        以XML或JSON作为数据交互格式

        以HTML和CSS作为数据展现(渲染)

        

      AJAX交互(异步)和传统交互(同步)区别

        1.请求的发送和接收

          传统:浏览器直接发送HTTP请求,然后由浏览器直接接收服务器返回结果,直接呈现到浏览器页面上。

          AJAX:浏览器利用js调用XMLHttpRequest对象发送HTTP请求,然后再利用XMLHttpRequest接收服务器返回结果,然后还需要利用js将结果显示到浏览器页面上。

        2.如何区分Ajax请求和传统请求

          请求的Header格式不同,Ajax请求会在请求Header部分多一组参数值

          x-requested-with:XMLHttpRequest

          如果存储该参数可以认为是ajax;不存在就可以认为是传统表单或超链接

        3.服务器响应结果不同

          传统:服务器一般都会去调用Servlet或JSP生成一个HTML界面给浏览器,然后浏览器显示

          ajax:服务器一般都会去调用Servlet处理,然后生成一个JSON或者XML字符串结果给XMLHttpRequest

        4.页面刷新不同

          传统:整个页面刷新

          Ajax:局部刷新

        5.同步和异步不同

          传统:同步交互模式:请求1--->响应1--->请求2--->响应2

          Ajax:异步交互模式:请求1--->请求2--->响应1--->响应2

    二、Ajax作用和优点介绍

      AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

      AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

      页面可以局部刷新处理,页面不改变,异步请求和响应,使用户操作更连续,提升用户体验感,Ajax交互传输数据量较小,提升程序性能,异步处理,可以进行异步加载和请求处理,减少整个页面刷新的频率

    三、Ajax的使用步骤

      第一步:创建一个XMLHTTPRequest对象,发送请求,在客户端js中编程

       第二步:创建Servlet重写service,接收请求并响应,在服务器端java中编程

    、Ajax案例-使用js配合Servlet单纯的实现ajax(有了JQuery就比这简单多了)

      html和js代码:

     1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     2 <html>
     3   <head>
     4     <base href="<%=basePath%>">
     5     
     6     <title>My JSP 'index.jsp' starting page</title>
     7     <meta http-equiv="pragma" content="no-cache">
     8     <meta http-equiv="cache-control" content="no-cache">
     9     <meta http-equiv="expires" content="0">    
    10     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    11     <meta http-equiv="description" content="This is my page">
    12     <!--
    13     <link rel="stylesheet" type="text/css" href="styles.css">
    14     -->
    15     <script type="text/javascript">
    16         function sendRequest(){
    17             //第一步:创建一个XMLHTTPRequest对象
    18             var xhr = null;
    19             if(window.XMLHttpRequest){
    20                 //支持chrom,IE7 8 9
    21                 xhr = new XMLHttpRequest();    
    22             }
    23             else{//IE5 6支持
    24                 xhr = new ActiveXObject("Microsoft.XMLHTTP");
    25             }
    26             
    27             //第二步:创建一个HTTP请求
    28             xhr.open("get","hello.do",true);
    29             
    30             //第三步:设置回调处理函数
    31             xhr.onreadystatechange = function(){//指定响应函数
    32                 //判断响应接收状态是否成功,如果成功才进行
    33                 if(xhr.readyState == 4 && xhr.status == 200){
    34                     //获取服务器返回的字符串信息
    35                     var msg = xhr.responseText;
    36                     document.getElementById("msg").innerHTML = msg;
    37                     document.getElementById("msg").style.color = "blue";
    38                 }
    39             };
    40         
    41             //第四步:发送ajax请求
    42             xhr.send(null);
    43         }
    44         
    45         //第五步:创建事件函数实现功能:每隔一秒钟调用hello.do请求刷新页面显示
    46         function showMsg(){
    47             setInterval('sendRequest()', 1000);
    48         }
    49     </script>
    50   </head>
    51   
    52   <body>
    53     <input type = "button" value = "显示信息" onclick = "showMsg();">
    54     <div id="msg"></div>
    55   </body>
    56 </html>

      Servlet的java代码:

     1 package ajaxServlet;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 import java.util.Random;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.http.HttpServlet;
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 
    12 public class AjaxServlet extends HttpServlet{
    13     
    14     private static final long serialVersionUID = 1L;
    15     
    16     @Override
    17     protected void service(HttpServletRequest request, HttpServletResponse response)
    18             throws ServletException, IOException {
    19         // TODO Auto-generated method stub
    20         System.out.println("Ajax请求处理后台输出");
    21         
    22         //输出消息给前端响应
    23         response.setCharacterEncoding("UTF-8");
    24         PrintWriter out =  response.getWriter();
    25         Random random = new Random();
    26         out.println("ajax 后台输出"+random.nextInt(100));
    27         out.close();
    28     }
    29 }

      案例效果截图:

     五、JQuery的Ajax案例实现

      第一步:引入JQuery的js文件(放在webroot中,可以直接复制进去)

      第二步:使用JQuery的Ajax

          jQuery.get(url,[data],[callback],[type]);//用于发送get请求

          语法:

            $.get("请求地址",{请求参数,一般以JSON格式传输},"回调函数","返回数据类型");

          举例:

            $.get("login.do",{"username":"张三","password":"123"},function(data){alert(data);},"json");

          代码:(Servlet的java代码不变,前端js代码瞬间简单,最后效果一样)

     1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     2 <html>
     3   <head>
     4     <base href="<%=basePath%>">
     5     
     6     <title>My JSP 'JQueryAjax.jsp' starting page</title>
     7     
     8     <meta http-equiv="pragma" content="no-cache">
     9     <meta http-equiv="cache-control" content="no-cache">
    10     <meta http-equiv="expires" content="0">    
    11     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    12     <meta http-equiv="description" content="This is my page">
    13     <!--
    14     <link rel="stylesheet" type="text/css" href="styles.css">
    15     -->
    16 
    17       <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    18       <script type="text/javascript">
    19           /*页面就绪函数,当页面加载时,自动执行,用于测试JQuery文件夹是否引用  */
    20           $(function(){
    21               alert("11");
    22           });
    23           
    24           //第一步:创建指定响应函数
    25           function sendRequest(){
    26               $.get("hello.do",function(data){
    27                                   document.getElementById("msg").innerHTML = data;
    28                                 document.getElementById("msg").style.color = "blue";
    29                               },"text");
    30           }
    31           //第二步:创建事件函数实现功能:每隔一秒钟调用hello.do请求刷新页面显示
    32         function showMsg(){
    33             setInterval("sendRequest()", 1000);
    34         }
    35       </script>
    36   </head>
    37   
    38   <body>
    39     <input type = "button" value = "显示信息" onclick = "showMsg();">
    40     <div id="msg"></div>
    41   </body>
    42 </html>

          jQuery.post(url,[data],[callback],[type]);//用于发送post请求,语法都和$.get一样

          jQuery.ajax(url,[settings]);//用于发送ajax请求(既能实现get请求也能实现post请求)

          语法:

            $.ajax({

              url:"请求地址",

              type:"请求类型",

              async:true,//默认为true,表示异步;如果为false,同步

              data:{请求参数,一般以JSON格式传输},//发送到Servlet的数据,如果没有,删除就行了

              dataType:"返回数据类型",//返回数据的数据类型   json | text

              success:function(data){//回调成功,前端接收数据的函数

              },

              error:function(){//回调失败函数

                alert("服务器异常");

              }

            });

          举例:

            $.ajax({

              url:"login.do",

              type:"post",

              async:true,//默认为true,表示异步;如果为false,同步

              data:{"username":"张三","password":"123"},//发送到Servlet的数据,如果没有,删除就行了

              dataType:"json",//返回数据的数据类型   json | text

              success:function(data){//回调成功,前端接收数据的函数

              },

              error:function(){//回调失败函数

                alert("服务器异常");

              }

            });

           代码:(Servlet的java代码不变,前端js代码瞬间简单,最后效果一样)

     1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     2 <html>
     3   <head>
     4     <base href="<%=basePath%>">
     5     
     6     <title>My JSP 'JQueryAjax.jsp' starting page</title>
     7     
     8     <meta http-equiv="pragma" content="no-cache">
     9     <meta http-equiv="cache-control" content="no-cache">
    10     <meta http-equiv="expires" content="0">    
    11     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    12     <meta http-equiv="description" content="This is my page">
    13     <!--
    14     <link rel="stylesheet" type="text/css" href="styles.css">
    15     -->
    16 
    17       <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    18       <script type="text/javascript">
    19           /*页面就绪函数,当页面加载时,自动执行,用于测试JQuery文件夹是否引用  */
    20           $(function(){
    21               alert("11");
    22           });
    23           
    24           //第一步:创建指定响应函数
    25           function sendRequest(){
    26               /* $.get("hello.do",function(data){
    27                                   document.getElementById("msg").innerHTML = data;
    28                                 document.getElementById("msg").style.color = "blue";
    29                               },"text"); */
    30               $.ajax({
    31                   url:"login.do",
    32                   type:"post",
    33                   /* async:true,//默认为true,表示异步;如果为false,同步
    34                   data:{"username":"张三","password":"123"},//发送到Servlet的数据,如果没有,删除就行了 */
    35                   dataType:"text",//返回数据的数据类型   json | text
    36                   success:function(data){//回调成功,前端接收数据的函数
    37                         document.getElementById("msg").innerHTML = data;
    38                         document.getElementById("msg").style.color = "blue";
    39                 },
    40                 error:function(){//回调失败函数
    41                     alert("服务器异常");
    42                 }
    43             });
    44           }
    45           //第二步:创建事件函数实现功能:每隔一秒钟调用hello.do请求刷新页面显示
    46         function showMsg(){
    47             setInterval("sendRequest()", 1000);
    48         }
    49       </script>
    50   </head>
    51   
    52   <body>
    53     <input type = "button" value = "显示信息" onclick = "showMsg();">
    54     <div id="msg"></div>
    55   </body>
    56 </html>

             

  • 相关阅读:
    转载: SQLyog连接MySQL8 异常2059Authentication plugin 'caching_sha2_password' cannot be loaded解决方案
    linux 运维知识主页
    解决Xshell连接远程linux服务器,关闭Xshell程序对应的运行程序也相
    WPF布局控件
    WPF属性
    AutoMapper 四啥注意
    引用类型和值类型
    蠢鸟之xamarin.forms下面加载字体之二
    一头好奇的猫(庆军)之AES ECB模式C#要跟JAVA一致的话需要注意的
    加班
  • 原文地址:https://www.cnblogs.com/qinqin-me/p/12399188.html
Copyright © 2020-2023  润新知