zoukankan      html  css  js  c++  java
  • JavaWeb-ajax

    1 Ajax概述

    1.什么是同步,什么是异步

    同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待     卡死状态

    异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随     意做其他事情,不会被卡死

    2.Ajax的运行原理

    页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到      服务器端,在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回   给Ajax引擎后,会触发你设置的事件,从而执行自定义的js逻辑代码完成某种页面1  功能。

    2 js原生的Ajax技术(了解)

    js原生的Ajax其实就是围绕浏览器内内置的Ajax引擎对象进行学习的,要使用js原     生的Ajax完成异步操作,有如下几个步骤:

    1)创建Ajax引擎对象

    2)为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎)

    3)绑定提交地址

    4)发送请求

    5)接受响应数据

    function fn1(){
    
                //1、创建ajax引擎对象 ---- 所有的操作都是通过引擎对象
    
                var xmlHttp = new XMLHttpRequest();
    
                //2、绑定监听 ---- 监听服务器是否已经返回相应数据
    
                xmlHttp.onreadystatechange = function(){
    
                      if(xmlHttp.readyState==4&&xmlHttp.status==200){
    
                           //5、接受相应数据
    
                           var res = xmlHttp.responseText;
    
                           document.getElementById("span1").innerHTML = res;
    
                      }
    
                }
    
                //3、绑定地址
    
                xmlHttp.open("GET","/WEB22/ajaxServlet?name=lisi",true);
    
                //4、发送请求
    
                xmlHttp.send();
    
               
    
          }

    注意:如果是post提交

    在发送请求之前设置一个头

    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    总结:

    所用异步访问都是ajax引擎

    3 Json数据格式(重要)

    json是一种与语言无关的数据交换的格式,作用:

    使用ajax进行前后台数据交换

    移动端与服务端的数据交换

    3.Json的格式与解析

    json有两种格式:

    1)对象格式:{"key1":obj,"key2":obj,"key3":obj...}

    2)数组/集合格式:[obj,obj,obj...]

    例如:user对象 用json数据格式表示

    {"username":"zhangsan","age":28,"password":"123","addr":"北京"}

    List<Product> 用json数据格式表示

    [{"pid":"10","pname":"小米4C"},{},{}]

    注意:对象格式和数组格式可以互相嵌套

    注意:json的key是字符串  jaon的value是Object

    json的解析:

    json是js的原生内容,也就意味着js可以直接取出json对象中的数据

      <script language="JavaScript">
        /**
         * 案例一
         *  {key:value,key:value}
         *  
         * class Person{
         *       String firstname = "张";
         *    String lastname = "三丰";
         *    Integer age = 100;
         * }
         * 
         * Person p = new Person();
         * System.out.println(p.firstname);
         */
        
        var person = {"firstname":"","lastname":"三丰","age":100};
         
         //取出lastname
         alert(person.lastname);
         //取出age
         alert(person.age);
        
        
    
      </script>
    
    <script language="JavaScript">
          /**
         * 案例二
         *  [{key:value,key:value},{key:value,key:value}]
         *  
         */
         
         var persons = [
                            {"firstname":"","lastname":"三丰","age":100},
                            {"firstname":"","lastname":"","age":25}
                        ];
         
        //取出 firstname=李
        alert(persons[1].firstname);
        //取100
        alert(persons[0].age);
          
          
      </script>
    
    <script language="JavaScript">
       /**
         * 案例三
         * {
         *   "param":[{key:value,key:value},{key:value,key:value}]
         * }
         *  
         *  
         */
         
         var json = {
                         "baobao":[
                                       {"name":"小双","age":28,"addr":"扬州"},
                                       {"name":"建宁","age":18,"addr":"紫禁城"},
                                       {"name":"阿珂","age":10,"addr":"山西"},
                                   ]
                     };
        
         //娶name = 建宁
         alert(json.baobao[1].name);
         
         //取addr 山西
         alert(json.baobao[2].addr);
        
        
      </script>
    
    <script language="JavaScript">
       /**
         * 案例四
         * {
         *   "param1":[{key:value,key:value},{key:value,key:value}],
         *   "param2":[{key:value,key:value},{key:value,key:value}],
         *   "param3":[{key:value,key:value},{key:value,key:value}]
         * }
         *  
         *  
         */
         var json = {
                         "baobao":[
                                       {"name":"小双","age":28,"addr":"扬州"},
                                       {"name":"建宁","age":18,"addr":"紫禁城"},
                                       {"name":"阿珂","age":10,"addr":"山西"},
                                   ],
                          "haohao":[
                                       {"name":"张爽","age":25,"addr":"吉林"},
                                       {"name":"舒洁","age":23,"addr":"赤峰"}
                                   ]
                     };
         
        alert(json.haohao[1].name);
         
    
      </script>
    
    
    <script language="JavaScript">
         /**
         * 案例五
         * {
         *   "param1":"value1",
         *   "param2":{},
         *   "param3":[{key:value,key:value},{key:value,key:value}]
         * }
         *  
         *  
         */
         
         var json = {
                "key1":"value1",
                "key2":{"firstname":"","lastname":"三丰","age":100},
                "key3":[
                           {"name":"小双","age":28,"addr":"扬州"},
                           {"name":"建宁","age":18,"addr":"紫禁城"},
                           {"name":"阿珂","age":10,"addr":"山西"},
                       ]
         };
         
         alert(json.key2.lastname);
         
         alert(json.key3[2].name);
         
         
      </script>

    4.Json的转换插件

    将java的对象或集合转成json形式字符串

    json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串。

    常用的json转换工具有如下几种:

    1)jsonlib

    2)Gson:google

    3)fastjson:阿里巴巴

    4 Jquery的Ajax技术(重点)

    jquery是一个优秀的js框架,自然对js原生的ajax进行了封装,封装后的ajax的操    作方法更简洁,功能更强大,与ajax操作相关的jquery方法有如下几种,但开发中    经常使用的有三种

    1)$.get(url, [data], [callback], [type])

    2)$.post(url, [data], [callback], [type])

    其中:

    url:代表请求的服务器端地址

    data:代表请求服务器端的数据(可以是key=value形式也可以是json格式)

    callback:表示服务器端成功响应所触发的函数(只有正常成功返回才执行)

    type:表示服务器端返回的数据类型(jquery会根据指定的类型自动类型转换)

    常用的返回类型:text、json、html等

    3)$.ajax( { option1:value1,option2:value2... } ); ---- 以后在掌握

    常用的option有如下:

    async:是否异步,默认是true代表异步

    data:发送到服务器的参数,建议使用json格式

    dataType:服务器端返回的数据类型,常用text和json

    success:成功响应执行的函数,对应的类型是function类型

    type:请求方式,POST/GET

    url:请求服务器端地址

    5 异步校验用户名

    Jsp

    <script type="text/javascript">
    
          $(function(){
    
               
    
                //为输入框绑定事件
    
                $("#username").blur(function(){
    
                      //1、失去焦点获得输入框的内容
    
                      var usernameInput = $(this).val();
    
                      //2、去服务端校验该用户名是否存在---ajax
    
                      $.post(
    
                           "${pageContext.request.contextPath}/checkUsername",
    
                           {"username":usernameInput},
    
                           function(data){
    
                                 var isExist = data.isExist;
    
                                 //3、根据返回的isExist动态的显示信息
    
                                 var usernameInfo = "";
    
                                 if(isExist){
    
                                       //该用户存在
    
                                       usernameInfo = "该用户名已经存在";
    
                                       $("#usernameInfo").css("color","red");
    
                                 }else{
    
                                       usernameInfo = "该用户可以使用"
    
                                       $("#usernameInfo").css("color","green");
    
                                 }
    
                                 $("#usernameInfo").html(usernameInfo);
    
                                
    
                           },
    
                           "json"
    
                      );
    
                     
    
                     
    
                });
    
     
    
               
    
          });
    
    </script>

    Web

      //获得要校验的用户名
    
                String username = request.getParameter("username");
    
               
    
                //传递username到service
    
                UserService service = new UserService();
    
                boolean isExist = false;
    
                try {
    
                      isExist = service.checkUsername(username);
    
                } catch (SQLException e) {
    
                      e.printStackTrace();
    
                }
    
               
    
                response.getWriter().write("{"isExist":"+isExist+"}");

    6 站内搜索

    Jsp

    <form class="navbar-form navbar-right" role="search">
    
                                 <div class="form-group" style="position:relative">
    
                                       <input id="search" type="text" class="form-control" placeholder="Search" onkeyup="searchWord(this)">
    
                                       <div id="showDiv" style="display:none; position:absolute;z-index:1000;background:#fff; 179px;border:1px solid #ccc;">
    
                                            
    
                                       </div>
    
                                 </div>
    
                                 <button type="submit" class="btn btn-default">Submit</button>
    
                           </form>
    
                           <!-- 完成异步搜索 -->
    
                           <script type="text/javascript">
    
                          
    
                                 function overFn(obj){
    
                                       $(obj).css("background","#DBEAF9");
    
                                 }
    
                                 function outFn(obj){
    
                                       $(obj).css("background","#fff");
    
                                 }
    
                                
    
                                 function clickFn(obj){
    
                                       $("#search").val($(obj).html());
    
                                       $("#showDiv").css("display","none");
    
                                 }
    
                                
    
                          
    
                                 function searchWord(obj){
    
                                       //1、获得输入框的输入的内容
    
                                       var word = $(obj).val();
    
                                       //2、根据输入框的内容去数据库中模糊查询---List<Product>
    
                                       var content = "";
    
                                       $.post(
    
                                             "${pageContext.request.contextPath}/searchWord",
    
                                             {"word":word},
    
                                             function(data){
    
                                                   //3、将返回的商品的名称 现在showDiv中
    
                                                   //[{"pid":"1","pname":"小米 4c 官方版","market_price":8999.0,"shop_price":8999.0,"pimage":"products/1/c_0033.jpg","pdate":"2016-08-14","is_hot":1,"pdesc":"小米 4c 标准版 全网通 白色 移动联通电信4G手机 双卡双待 官方好好","pflag":0,"cid":"1"}]
    
                                                  
    
                                                   if(data.length>0){
    
                                                         for(var i=0;i<data.length;i++){
    
                                                              content+="<div style='padding:5px;cursor:pointer' onclick='clickFn(this)' onmouseover='overFn(this)' onmouseout='outFn(this)'>"+data[i]+"</div>";
    
                                                         }
    
                                                         $("#showDiv").html(content);
    
                                                         $("#showDiv").css("display","block");
    
                                                   }
    
                                                  
    
                                             },
    
                                             "json"
    
                                       );
    
                                      
    
                                 }
    
                           </script>

    Web

    注意在这里使用里json转换工具

    //获得关键字
    
                String word = request.getParameter("word");
    
               
    
                //查询该关键字的所有商品
    
                ProductService service = new ProductService();
    
                List<Object> productList = null;
    
                try {
    
                      productList = service.findProductByWord(word);
    
                } catch (SQLException e) {
    
                      e.printStackTrace();
    
                }
    
               
    
                //["xiaomi","huawei",""...]
    
               
    
                //使用json的转换工具将对象或集合转成json格式的字符串
    
                /*JSONArray fromObject = JSONArray.fromObject(productList);
    
                String string = fromObject.toString();
    
                System.out.println(string);*/
    
               
    
                Gson gson = new Gson();
    
                String json = gson.toJson(productList);
    
                System.out.println(json);
    
               
    
                response.setContentType("text/html;charset=UTF-8");
    
               
    
                response.getWriter().write(json);

    源码

    链接:https://pan.baidu.com/s/1M0I-uvE28W3FE4OXZqXcMw 密码:gxo5


    作者:8亩田
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

    本文如对您有帮助,还请多帮 【推荐】 下此文。
    如果喜欢我的文章,请关注我的公众号
    如果有疑问,请下面留言

    学而不思则罔 思而不学则殆
  • 相关阅读:
    加密CMD使电脑溢出也拿不到CMD权限
    全面提升Linux服务器的安全
    ping 源码,详细解释
    伤心一百回
    聊聊我对黑客技术的思考
    一个网管员的真实成长经历
    通过命令限制上网用户的权限
    防范黑客的简单办法
    “黑客”人生
    黑客现身讲话
  • 原文地址:https://www.cnblogs.com/liu-wang/p/8621289.html
Copyright © 2011-2022 走看看