SpringMVC-ajax初探

springMVC-ajax初探

ajax

Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

原生的我不会用,目前只会使用jquery来使用ajax完成异步刷新

定义和用法

ajax() 方法用于执行 AJAX(异步 HTTP)请求。

所有的 jQuery AJAX 方法都使用 ajax() 方法。该方法通常用于其他方法不能完成的请求。


语法

$.ajax({name:value, name:value, ... })

该参数规定 AJAX 请求的一个或多个名称/值对。

下面的表格中列出了可能的名称/值:

名称值/描述
async布尔值,表示请求是否异步处理。默认是 true。
beforeSend(xhr)发送请求前运行的函数。
cache布尔值,表示浏览器是否缓存被请求页面。默认是 true。
complete(xhr,status)请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。
contentType发送数据到服务器时所使用的内容类型。默认是:“application/x-www-form-urlencoded”。
context为所有 AJAX 相关的回调函数规定 “this” 值。
data规定要发送到服务器的数据。
dataFilter(data,type)用于处理 XMLHttpRequest 原始响应数据的函数。
dataType预期的服务器响应的数据类型。
error(xhr,status,error)如果请求失败要运行的函数。
global布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。
ifModified布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。
jsonp在一个 jsonp 中重写回调函数的字符串。
jsonpCallback在一个 jsonp 中规定回调函数的名称。
password规定在 HTTP 访问认证请求中使用的密码。
processData布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。
scriptCharset规定请求的字符集。
success(result,status,xhr)当请求成功时运行的函数。
timeout设置本地的请求超时时间(以毫秒计)。
traditional布尔值,规定是否使用参数序列化的传统样式。
type规定请求的类型(GET 或 POST)。
url规定发送请求的 URL。默认是当前页面。
username规定在 HTTP 访问认证请求中使用的用户名。
xhr用于创建 XMLHttpRequest 对象的函数。

他本身有很多参数,但是用到基本多是一个架构的东西,记住url,data,success(data)就差不多了

$.ajax({
  url : "xxxxxx", //与后端交互的地址,发起的请求
  data : {"xxx" : $("#xx").val()},//前端传给后端的值,使用json的形式
  success : function (data) { // 载入成功的回调函数(里面的data是后端返回过来的数据)
    console.log(data);
  }
});

例子

还是用几个例子来说明,使用springMVC一个框架就可以完成这些例子

  1. 第一个例子,一个输入框,失去焦点后,在控制台打印后端传来的值
  • jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>ajax jquery</title>
    <%--使用jquery需要导入jquery文件
      ${pageContext.request.contextPath} 获得绝对路径
     --%>
    <script type="text/javascript" src="${pageContext.request.contextPath}/static/jquery-3.6.0.js"></script>
  </head>
  <body>
  <div>
    <p>用户名</p>
    <%-- onblur 失去焦点--%>
    <input type="text" id="userName" οnblur="a()"/>
  </div>
  </body>

<script type="text/javascript">
  function a(){
    /*
    使用ajax的参数
    url: 待载入的页面,与后端交互的地址
    data:前端传过去的数据,key-value键值对
    success:载入成功的回调函数(里面的data是后端返回过来的数据)
    ajax 默认是get请求
    使用post的话 $.post({});
     */
    $.ajax({
      url : "${pageContext.request.contextPath}/ajax/test1",
      data : {"name" : $("#userName").val()},
      success : function (data) {
        console.log(data);
      }
    });
  }

</script>
</html>
  • controller
@GetMapping("/test1")
@ResponseBody
public String test1(String name){
    return name + "你好!世界!";
}

注意记得导入jquery文件 可能出现的问题: json返回前端乱码的问题,访问不到静态资源

  • json返回乱码是因为@ResponseBody这个注解默认的编码不是utf-8,导致前端接受到乱码,解决方法,就是在springmvc的配置文件中加
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8</value>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
  • 访问不到静态资源,两种可能,先检查自己是否把静态资源放在了WEB-INF目录下。如果在WEB-INF目录下需要配置静态资源的映射。如果放在外面,需要在springmvc配置文件中加静态资源过滤
<!-- 静态资源过滤 必须放在WEB-INF外 -->
<mvc:default-servlet-handler/>
<!-- 放在WEB-INF下的话就配置这个映射
	mapping:映射地址
	location:本地地址
-->
<mvc:resources mapping="/XXX" location="/XXX"/>
  1. 第二个例子,后端传一个list的json字符串,前端解析后在table中显示
  • jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ajax2</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/static/jquery-3.6.0.js"></script>
</head>
<body>
<div>
    <input type="button" id="btn" value="获取" οnclick="on()"/>
    <table width="400px">
        <tr>
            <td>姓名</td>
            <td>年龄</td>
            <td>性别</td>
        </tr>
        <tbody id="content"></tbody>
    </table>
</div>

<script type="text/javascript">
    function on(){
        $.post({
            url : "${pageContext.request.contextPath}/ajax/test2",
            success : function (data) {
                console.log(data);
                var users = JSON.parse(data); //将json转换为js对象
                var html = "";
                for(var i = 0; i < users.length; ++i){
                    html += "<tr>" +
                    "<td>" + users[i].name + "</td>" +
                    "<td>" + users[i].age + "</td>" +
                    "<td>" + users[i].sex + "</td>" +
                    "</tr>"
                }
                $("#content").html(html); //将html语言加进content中
            }
        });
    }
</script>
</body>
</html>
  • controller
@PostMapping("/test2")
@ResponseBody
public String test2() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    List<User> users = new ArrayList<>();
    User user = new User("小明",17,"男");
    User user2 = new User("小红",16,"女");
    User user3 = new User("张三",40,"男");

    users.add(user);
    users.add(user2);
    users.add(user3);
    System.out.println(mapper.writeValueAsString(users));
    return mapper.writeValueAsString(users); //传json过去
}

注意记得导入jquery文件,因为这里使用的是jackson,所以要记得导依赖

  1. 第三个例子就是,注册验证
  • jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ajax3</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/static/jquery-3.6.0.js"></script>
</head>
<body>
<p>
    用户:
    <input type="text" id="name" οnblur="a1()"/>
    <span id="userInfo"></span>
</p>
<p>
    密码:
    <input type="text" id="pwd" οnblur="a2()"/>
    <span id="pwdInfo"></span>
</p>

<script type="text/javascript">
    function a1(){
        $.post({
            url : "${pageContext.request.contextPath}/ajax/test3",
            data : {"name" : $("#name").val()},
            success : function (data) {
                $("#userInfo").html(data);
            }
        });
    }

    function a2(){
        $.post({
            url : "${pageContext.request.contextPath}/ajax/test3",
            data : {"pwd" : $("#pwd").val()},
            success : function (data) {
                $("#pwdInfo").html(data);
            }
        });
    }
</script>
</body>
</html>
  • controller
@PostMapping("/test3")
@ResponseBody
public String test3(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;
}

注意:导jquery文件

总结

ajax异步响应,不需要刷新页面,就可以与后端交互数据并刷新页面的一些数据

需要记得jquery使用ajax中几个参数

url:与后端交互的地址

data:前端传给后端的数据,使用json形式

success:成功的回调函数 (他里面的data就是后端返回的数据)

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值