Ajax用法

本文介绍了Ajax技术的基本概念,它是用于创建交互性更强、响应更快的Web应用程序的技术,允许在不完全刷新页面的情况下更新内容。jQuery库简化了Ajax操作,提供了$.ajax方法,支持HTTPGet和POST请求,并能将数据直接载入网页元素。文中通过一个SpringMVC实例展示了如何使用Ajax获取并显示数据,以及如何处理登录验证的异步请求。同时,还涉及了控制器端的处理方法和前端HTML页面的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 简介

  • AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

  • Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术

  • 传统的网页(即不用ajax技术的网页),想要更新内容或者提交一个表单,都需要重新加载整个网页

  • 使用ajax技术的网页,通过在后台服务器进行少量的数据交换,就可以实现异步局部更新

  • 使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面

2. jQuery.ajax

  • Ajax的核心是XMLHttpRequest对象(XHR),XHR为向服务器发送请求和解析服务器响应提供了接口,能够以异步方式从服务器获取新数据

  • 通过jQuery AJAX方法,能使用HTTP Get和HTTP Post从远程服务器上请求文本、HTML、XML 或 JSON,同时能把这些外部数据直接载入网页的被选元素中

  • jQuery Ajax本质就是XMLHttpRequest

jQuery.ajax(...)
      部分参数:
          url:请求地址
          type:请求方式,GET、POST(1.9.0之后用method)
          headers:请求头
          data:要发送的数据
          contentType:即将发送信息至服务器的内容编码类型(默认: "application/x-www-form-urlencoded; charset=UTF-8")
          async:是否异步
          timeout:设置请求超时时间(毫秒)
          beforeSend:发送请求前执行的函数(全局)
          complete:完成之后执行的回调函数(全局)
          success:成功之后执行的回调函数(全局)
          error:失败之后执行的回调函数(全局)
          accepts:通过请求头发送给服务器,告诉服务器当前客户端可接受的数据类型
          dataType:将服务器端返回的数据转换成指定类型
          "xml": 将服务器端返回的内容转换成xml格式
          "text": 将服务器端返回的内容转换成普通文本格式
          "html": 将服务器端返回的内容转换成普通文本格式,在插入DOM中时,如果包含JavaScript标签,则会尝试去执行。
          "script": 尝试将返回值当作JavaScript去执行,然后再将服务器端返回的内容转换成普通文本格式
          "json": 将服务器端返回的内容转换成相应的JavaScript对象
          "jsonp": JSONP 格式使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数

3. Ajax的使用

点击获取数据按钮即可异步刷新获取数据

  1. SpringMVC配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
        <context:component-scan base-package="com.lrm.controller"/>
    
        <!--静态资源过滤-->
        <mvc:default-servlet-handler/>
    
        <!--注解驱动,解决JSON乱码-->
        <mvc:annotation-driven>
            <mvc:message-converters register-defaults="true">
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="UTF-8"/>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="objectMapper">
                        <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                            <property name="failOnEmptyBeans" value="false"/>
                        </bean>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
    
    
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              id="internalResourceViewResolver">
            <!-- 前缀 -->
            <property name="prefix" value="/WEB-INF/jsp/" />
            <!-- 后缀 -->
            <property name="suffix" value=".jsp" />
        </bean>
    
    </beans>
    
  2. 前端界面(导入jquery.js)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
        <script src="${pageContext.request.contextPath}/statics/js/jquery-3.6.0.js"></script>
    
        <script type="text/javascript">
            $(function (){
                $("#btn").click(function (){
                    /*
                        简写方式
                        $.post(url,param[可以省略],success)
                    */
                    $.post("${pageContext.request.contextPath}/a1",function (data){
                        var html = "";
                        for (let i = 0; i < data.length; i++) {
                            html += "<tr>" +
                                "<td>" + data[i].name + "</td>" +
                                "<td>" + data[i].age + "</td>" +
                                "<td>" + data[i].sex + "</td>" +
                                "</tr>";
                        }
                        $("#content").html(html);
                    })
                })
            })
        </script>
    </head>
    <body>
    <input type="button" value="获取数据" id="btn">
    <table>
        <tr>
            <td>姓名</td>
            <td>年龄</td>
            <td>性别</td>
        </tr>
        <tbody id="content">
            <%--获取后台数据--%>
        </tbody>
    </table>
    </body>
    </html>
    
  3. 编写一个实体类

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private String name;
        private int age;
        private String sex;
    }
    
  4. Controller处理ajax请求

    @RequestMapping("/a1")
    public List<User> a1(){
        List<User> userList = new ArrayList<User>();
    
        //添加数据
        userList.add(new User("小明",15,"男"));
        userList.add(new User("小红",17,"女"));
        userList.add(new User("小刚",16,"男"));
    
        return userList;
    }
    

用户名密码登录异步判断

  1. 编写登录界面(导入jquery.js)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
        <script src="${pageContext.request.contextPath}/statics/js/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            function a1(){
                //发起请求
                $.post({
                    url:"${pageContext.request.contextPath}/a2",
                    data:{"name":$("#name").val()},
                    success:function (data){
                        if(data==="ok"){
                            $("#userInfo").css("color","green");
                        }else {
                            $("#userInfo").css("color","red");
                        }
                        $("#userInfo").html(data);
                    }
                })
            }
            function a2(){
                $.post({
                    url:"${pageContext.request.contextPath}/a2",
                    data:{"pwd":$("#pwd").val()},
                    success:function (data){
                        if(data==="ok"){
                            $("#pwdInfo").css("color","green");
                        }else {
                            $("#pwdInfo").css("color","red");
                        }
                        $("#pwdInfo").html(data);
                    }
                })
            }
        </script>
    </head>
    <body>
        <p>
            用户名:<input type="text" id="name" onblur="a1()">
            <span id="userInfo"></span>
        </p>
        <p>
            密码:<input type="text" id="pwd" onblur="a2()">
            <span id="pwdInfo"></span>
        </p>
    </body>
    </html>
    
  2. Controller处理ajax请求

    @RequestMapping("/a2")
    public String a3(String name,String pwd){
        String msg = "";
        if(name!=null){
            //从数据库中查询
            if("admin".equals(name)){
                msg = "ok";
            }else {
                msg = "用户名有误";
            }
        }
    
        if(pwd!=null){
            //从数据库中查询
            if("123456".equals(pwd)){
                msg = "ok";
            }else {
                msg = "密码有误";
            }
        }
        return msg;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Remote_Li

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

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

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

打赏作者

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

抵扣说明:

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

余额充值