• Ajax 异步刷新


    一、Ajax 异步刷新

    1)Ajax简介

    1. Ajax的应用场景

    1.在线视频、直播平台等…评论实时更新、点赞、小礼物、…
    2.会员注册时的信息验证,手机号、账号唯一
    3.百度关键搜索补全功能
    4.地图

    2. Ajax简介

    Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
    Ajax 是一种用于创建快速动态网页的技术。
    Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
    通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
    传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

    3. 同步方式与异步方式区别

    同步方式发送请求 :

    发送一个请求,需要等待响应返回,然后才能够发送下一个请求,如果该请求没有响应,不能发送下一个请求,客户端会处于一直等待过程中。

    异步方式发送请求 :

    发送一个请求,不需要等待响应返回,随时可以再发送下一个请求,即不需要等待。

    2)JS原生方式实现异步

    1. 实现步骤

    1. 定义一个XMLHttpRequest核心对象xhr;
    2. 通过xhr.open方法给当前对象提供访问方式、URL等。
    3. 发送当前的请求至指定的URL
    4. 接收返回值并处理
    

    2. 案例需求

    需求:
    前台页面通过一个按钮向后台发送一个Ajax请求,后台做完处理后向前台页面响应一段文本信息显示在页面上。

    3. 案例实现

    jsp代码

    <%--
     Created by IntelliJ IDEA.
     User: Administrator
     Date: 2021/7/21
     Time: 9:22
     To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Title</title>
    </head>
    <body>
    <!-- 前台页面通过一个按钮向后台发送一个Ajax请求,后台做完处理后向前台页面响应一段文本信息显示在页面上。-->
    <!-- ajax 其实是js的一种应用 -->
    <input type="button"  value="异步请求" onclick="sendMessage()"/>
    
    <h1 id="show"></h1>
    </body>
    
    <script>
    
       function sendMessage(){
           //创建ajax 核心对象
           var ajax = new XMLHttpRequest();
           //准备ajax请求
           ajax.open("get","http://localhost/demo1?name=helloworld");
           //发送请求
           ajax.send();
           //获取服务器响应的内容,当服务器处理完毕之后获取响应数据
           ajax.onreadystatechange=function(){
              if(ajax.readyState==4 && ajax.status == 200){
                  document.getElementById("show").innerHTML = ajax.responseText;
              }
           }
       }
    </script>
    </html>
    
    

    Servlet代码

    package com.offcn.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/demo1")
    public class DemoServlet1 extends HttpServlet {
       @Override
           protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
               req.setCharacterEncoding("utf-8");
                resp.setContentType("text/html;charset=utf-8");
                resp.getWriter().print("您好,世界");
            }
        }
        
        ```
    

    jQuery方式实现异步

    JS版的Ajax仅做为了解,我们重点学习jQuery版的Ajax,jQuery是一个优秀的js框架,自然对JS原生的Ajax进行了封装,封装后的Ajax的操作方法更简洁,功能更强大,这也是程序员最普遍使用,语法结构简单,代码可读性好。
    与Ajax操作相关的jQuery方法经常使用的有三种:

    请求方式 语法
    Ajax请求 $.ajax([settings])
    GET请求 $.get(url, [data], [callback], [type])
    POST请求 $.post(url, [data], [callback], [type])

    1. Ajax请求

    语法格式:

    $.ajax({
    	url:"",
    	data:{},
    	type:"post/get",
    	dataType:"text",
    	success:function(obj){
    
    		}
    })
    

    属性解析:

    参数名称 描述
    url 请求的服务器端url地址, 与form表单中的action一样,都是代表请求的路径
    data 前台需要向后台传递的数据(键值对形式)
    type 和form表单中method对应,代表请求类型 get/post
    dataType 回传的数据类型。text、xml、html、json...
    success 成功的回调函数,参数obj表示返回值

    注意事项:

    1、每个属性后都要跟随一个英文逗号,最后一个不用。
    2、每一个属性都是键值对的形式存在,中间用英文冒号:隔开
    3、data:{} 是一个特殊的写法,值是一个{},里面使用键值对存储
       例如:data:{“键1”:值1, “键2”:值2, “键3”:值3}
    4、以上属性没有先后顺序要求
    

    代码

    jsp:
    
    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2021/9/13
      Time: 9:47
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>基于jquery版本ajax方法</title>
    </head>
    <body>
    
    <ul>
        <li>html</li>
        <li>javascript</li>
        <li>css</li>
        <li>jquery</li>
    </ul>
    
    <button type="button" onclick="send()">发送ajax请求</button>
    
    
    <div id="message"></div>
    
    </body>
    
    <script src="js/jquery-1.8.3.js"></script>
    <script>
        function send(){
            $.ajax({
                url:"testAjax",
                data:{"name":"jack"},
                type:"get",
                dataType:"text",
                success:function(responseData){
                    $("#message").html(responseData);
                }
            });
        }
    </script>
    </html>
    
    
            
    servlet:
    
    package com.offcn.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/testAjax")
    public class TestAjaxServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html;charset=utf-8");
            System.out.println("接受到了ajax请求");
            String name = req.getParameter("name");
            System.out.println(name);
            resp.getWriter().print("已经接收到了来自客户端的请求...");
        }
    }
    
    
    

    2. GET请求

    语法格式:

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

    属性解析:

    参数名称 描述
    url 请求的服务器端url地址, 与form表单中的action一样,都是代表请求的路径
    data 前台需要向后台传递的数据(键值对形式)
    callback 当请求成功后的回掉函数,可以在函数体中编写我们的逻辑代码
    type 预期的返回数据的类型,取值可以是 text、xml、html、json...

    注意事项:

    这种写法功能和$.ajax是一样的,但是严格要求属性顺序。
    

    3. POST请求

    语法格式:

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

    属性解析:

    参数名称 描述
    url 请求的服务器端url地址, 与form表单中的action一样,都是代表请求的路径
    data 前台需要向后台传递的数据(键值对形式)
    callback 当请求成功后的回掉函数,可以在函数体中编写我们的逻辑代码
    type 预期的返回数据的类型,取值可以是 text、xml、html、json...

    注意事项:

    这种写法功能和$.ajax是一样的,但是严格要求属性顺序。
    

    3. (.ajax与).get|$.post异同

    相同点:都是jQuery封装的方法实现异步交互。都需要导入jquery

    不同点:
    $.ajax()是jQuery的第一次封装,使用时稍显麻烦,但是功能强大,覆盖了get和post请求,有错误调试能力,写法顺序可以改变。

    (.post()和).get()是jQuery Ajax的第二次封装,由于(.Ajax()写法过于臃肿,简化为).post()和$.get(),功能是相同的没有区别。但是写法要求更高,参数顺序不能改变。

    总结: 简单的请求使用get、post 处理 。 复杂的请求使用 ajax处理

    代码

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2021/9/13
      Time: 10:32
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>get、post</title>
    </head>
    <body>
    <ul>
        <li>html</li>
        <li>javascript</li>
        <li>css</li>
        <li>jquery</li>
    </ul>
    <button type="button" onclick="send()">发送ajax请求</button>
    <div id="message"></div>
    </body>
    
    <script src="js/jquery-1.8.3.js"></script>
    <script>
        function send(){
            // 四个参数  分别是  地址   请求参数    回调函数     响应数据格式
    
            //参数的顺序是固定
            // $.get("testAjax",{"age":20,"sex":"男"},function(data){
            //     $("#message").html(data);
            // },"text");
    
    
            $.post("testAjax",{"age":20,"sex":"男"},function(data){
                $("#message").html(data);
            },"text");
        }
    </script>
    </html>
    
    

    image

  • 相关阅读:
    speeding up your web site 前端性能优化
    数据结构与算法学习链表
    SQL Server 无法生成 FRunCM 线程
    NoSql的优缺点
    Vs2012中开发Node.js应用
    利用GNUstep在windows下编写objectc
    Hadoop HDFS学习总结
    HBase Thrift 接口的一些使用问题及相关注意事项
    .NET深入解析LINQ框架
    【翻译】ASP.NET Web API是什么?
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/15315211.html
Copyright © 2020-2023  润新知