Ajax-初识+实例

1. Ajax

1.1 什么是Ajax

Ajax: 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,实现网页的异步更新。

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

核心: Ajax的核心是 JavaScript 对象 XMLHttpRequest。通过XMLHttpRequest,可以让我们使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

AJAX 组合了:

  • 浏览器内建的 XMLHttpRequest 对象(从 web 服务器请求数据)
  • JavaScript 和 HTML DOM(显示或使用数据)

1.2 Ajax工作原理

image-20211015091036853

图源:w3cschool

1.3 同步、异步请求

同步: 发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步: 发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

1.4 XMLHttpRequest

XMLHttpRequest:该对象用于同幕后服务器交换数据。

实例化XMLHttpRequest对象:

variable = new XMLHttpRequest();

1.5 Ajax应用场景

  • 注册时,用户名查重。
  • 搜索时,搜索引擎自动提示搜索关键字。

2. jQuery Ajax

jQuery Ajax的本质就是XMLHttpRequest !

2.1 jQuery AJAX 方法

ajax() 方法通过 HTTP 请求加载远程数据。

该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, . p o s t 等 。 .post 等。 .post.ajax() 返回其创建的 XMLHttpRequest 对象。

方法描述
$.ajax()执行异步 AJAX 请求
方法描述
$.get()使用 AJAX 的 HTTP GET 请求从服务器加载数据
$.post()使用 AJAX 的 HTTP POST 请求从服务器加载数据
load()从服务器加载数据,并把返回的数据放置到指定的元素中
方法描述
$.getJSON()使用 HTTP GET 请求从服务器加载 JSON 编码的数据
$.getScript()使用 AJAX 的 HTTP GET 请求从服务器加载并执行 JavaScript

2.2 jQuery AJAX 参数

语法格式:jQuery.ajax({settings})

参数名参数类型描述
urlString发送请求的地址
typeString请求方式
headersString请求头
dataObject要发送的数据
contentTypeString即将发送信息至服务器的内容编码类型,(默认: “application/x-www-form-urlencoded; charset=UTF-8”)
asyncBoolean是否异步(默认为true)
timeoutInt设置请求超时时间(毫秒)
beforeSendFunction发送请求前执行的函数(全局)
completeFunction完成之后执行的回调函数(全局)
successFunction成功之后执行的回调函数(全局)
errorFunction失败之后执行的回调函数(全局)
globalBoolean是否触发全局 AJAX 事件。(默认为true)
dataTypeString将服务器端返回的数据转换成指定类型

dataType选项:

"xml":返回 XML 文档,可用 jQuery 处理。
"html":返回纯文本 HTML 信息;包含 script 元素。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。
"json":返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

2.3 jQuery Ajax应用

实现功能:用户输入用户名,当输入框失去焦点时,实现异步刷新。

2.3.1 前期准备

1️⃣ Step1:给项目添加Web;

2️⃣ Step2:修改web.xml文件,配置DispatcherServlet映射;

3️⃣ Step3:修改web.xml文件,通过init-param初始化参数,并指定SpringMV-Servlet配置文件

4️⃣ Step4:修改web.xml文件,配置启动级别;

5️⃣ Step5:修改web.xml文件,配置CharacterEncodingFilter映射;

6️⃣ Step6:修改SpringMV-Servlet配置文件,配置context自动扫描、mvc注解支持、禁止加载静态资源;

7️⃣ Step7:修改SpringMV-Servlet配置文件,配置视图解析器InternalResourceViewResolver;

8️⃣ Step8:HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet;

9️⃣ Step9: DispatcherServlet将ModelAndView传给ViewReslover视图解析器;

2.3.1 编写Controller

具体思路:

1️⃣ Step1:通过@RestController标注该类为Controller,不进入视图(相当于方法上用@ResponseBody

2️⃣ Step2:配置映射地址为/Ajax

3️⃣ Step3:修改web.xml文件,通过init-param初始化参数,并指定SpringMV-Servlet配置文件

@RestController
public class AjaxController {

    /**
     * 获取前台输入的用户名,根据比较结果响应
     * @param name 前台传值
     * @param response 响应消息体
     * @throws IOException
     */
    @RequestMapping("/Ajax")
    public void Ajax(String name, HttpServletResponse response) throws IOException {
        if(name.equals("admin")){
            response.getWriter().print("true");
        }else {
            response.getWriter().print("false");
        }
    }
}

HttpServletResponse:
该接口继承自ServletResponse,实例化的HttpServletResponse对象来帮助servlet向客户端发送响应。

getWriter() :

该方法所获取的字符输出流对象为 PrintWriter 类型。由于 PrintWriter 类型的对象可以直接输出字符文本内容,因此,要想输出内容全部为字符文本的网页文档,则需要使用 getWriter() 方法。

2.3.3 编写JSP

2.3.3.1 前端页面
<input type="text" id="UserName" οnblur="On()">
2.3.3.2 jQuery Ajax

说明:

  • ${pageContext.request.contextPath}:绝对路径的方法,等价于<%=request.getContextPath()%>
  • data:前一个参数是要赋值的key,后一个参数具体的vlue值;
  • $("#UserName"):根据ID获取页面标签。
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
    function On() {
        $.post({
            url: "${pageContext.request.contextPath}/Ajax",
            data: {"name": $("#UserName").val()},
            success: function (data) {
                alert(data);
            }
        })
    }
</script>

2.3.4 测试输出

image-20211015105511332

image-20211015105543135

2.4 jQuery Ajax 获取List

2.4.1 编写Controller

@RequestMapping("/AjaxList")
public List<User> AjaxList() {
    List<User> list = new ArrayList<>();
    list.add(new User(1, "张三", "123123"));
    list.add(new User(2, "张三", "123123"));
    list.add(new User(3, "张三", "123123"));
    return list;
}

2.4.2 编写JSP

jQuery说明:

1️⃣ Step1:通过click获取button的单击事件;

2️⃣ Step2:function (data) {...},data为获取的Controller返回值;

3️⃣ Step3:定义context来存放每个对象的属性;

4️⃣ Step4:通过.html方法输出HTML文本。

<input type="button" id="btn" value="GetValue">
<table>
    <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>密码</td>
    </tr>
    <tbody id="users">

    </tbody>
</table>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#btn").click(function () {
            $.post(
                "${pageContext.request.contextPath}/AjaxList",
                function (data) {
                    var context = "";
                    for (var i = 0; i < data.length; i++) {
                        context += "<tr>" +
                            "<td>" + data[i].id + "</td>" +
                            "<td>" + data[i].name + "</td>" +
                            "<td>" + data[i].password + "</td>" +
                            "</tr>"
                    }
                    $("#users").html(context);
                });
        })
    })
</script>

2.4.3 测试输出

image-20211015150548901

2.5 jQuery Ajax 登录验证

2.5.1 编写Controller

Controller说明:

1️⃣ Step1:判断参数是否为空;

2️⃣ Step2:参数若不为空则根据equals结果赋予不同的result结果;

3️⃣ Step3:返回该result结果。

@RequestMapping("/AjaxSign")
public String AjaxSign(String username, String password) {
    String result = "";
    if (username != null) {
        if (username.equals("admin")) {
            result = "OK";
        } else {
            result = "Username Error !";
        }
    }
    if (password != null) {
        if (password.equals("123123")) {
            result = "OK";
        } else {
            result = "Password Error !";
        }
    }
    return result;
}

2.5.2 编写JSP

jQuery说明:

1️⃣ Step1:为每个文本框配置失去焦点事件,并在jQuery中分别实现该事件;

2️⃣ Step2:以JSON格式向Controller传输数据(输入框内容);

3️⃣ Step3:执行回调函数success;

4️⃣ Step4:根据Controller返回值来配置对应的css属性;

5️⃣ Step5:通过.html方法输出HTML文本。

<p>
    Username:<input type="text" id="Username" οnblur="On1()">
    <span id="UsernameContext"></span>
</p>
<p>
    Password:<input type="text" id="Password" οnblur="On2()">
    <span id="PasswordContext"></span>
</p>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
    function On1(){
        $.post({
            url:"${pageContext.request.contextPath}/AjaxSign",
            data:{"username":$("#Username").val()},
            success:function (data){
                if(data.toString() === "OK"){
                    $("#UsernameContext").css("color","green");
                }else{
                    $("#UsernameContext").css("color","red");
                }
                $("#UsernameContext").html(data);
            }
        })
    }
    function On2(){
        $.post({
            url:"${pageContext.request.contextPath}/AjaxSign",
            data:{"password":$("#Password").val()},
            success:function (data){
                if(data.toString() === "OK"){
                    $("#PasswordContext").css("color","green");
                }else{
                    $("#PasswordContext").css("color","red");
                }
                $("#PasswordContext").html(data);
            }
        })
    }
</script>

2.5.3 测试输出

image-20211015151158707

image-20211015151224414

3. 写在最后

$.post({})中data里面写的其实就是JSON数据。

image-20211015105726718

 


❤️ END ❤️
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOEL-T99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值