• ajax异步传值以及后端接收参数的几种方式


     异步传值

    第一种呢,也是最简单的一种,通过get提交方式,将参数在链接中以问号的形式进行传递

    1. // 前台传值方法
    2. // 触发该方法调用ajax
    3. function testAjax(yourData) {
    4. $.ajax({
    5. type: "get", //get方式发起请求
    6. url: "/yourUrl?yourDataName=" + yourData, // 将你的请求参数以问号拼接到url中进行参数传递
    7. success(data) {
    8. // data为返回值
    9. // 成功后的回调方法
    10. }
    11. })
    12. }
    1. // 后台接值方法
    2. @RequestMapping("/yourUrl")
    3. @ResponseBody
    4. // @RequestParam("yourData")是必不可少的,因为他指定了链接中的参数名称
    5. public String yourUrl(@RequestParam("yourData") String yourData) {
    6. System.out.println(yourData);
    7. // 返回值可以自由定义
    8. return "SUCCESS";
    9. }

     第二种呢,是将参数体现到链接中,在后台通过占位进行传递。

    1. // 前台传值方法,其实大体与上方相同只需注意url即可
    2. // 触发该方法调用ajax
    3. function testAjax(yourData) {
    4. $.ajax({
    5. type: "get", //get方式发起请求
    6. url: "/yourUrl/"+yourData, // 将你的请求参数拼接到url中进行参数传递
    7. success(data) {
    8. // data为返回值
    9. // 成功后的回调方法
    10. }
    11. })
    12. }
    1. // 后台接值方法
    2. @RequestMapping("/yourUrl/{yourDataName}")
    3. @ResponseBody
    4. // 同样@PathVariable("yourDataName")必不可少,因为他指定链接中某个位置代表着名为yourDataName的变量
    5. public String yourUrl(@PathVariable("yourDataName") String yourData) {
    6. System.out.println(yourData);
    7. // 返回值可以自由定义
    8. return "SUCCESS";
    9. }

     第三种呢,通过post提交方式将form表单中的数据序列化后传递到后台

    1. // 前台传值方法
    2. function testAjax() {
    3. $.ajax({
    4. type: "post", // 以post方式发起请求
    5. url: "/yourUrl", // 你的请求链接
    6. data:$("#myForm").serialize(), // 对id为myForm的表单数据进行序列化并传递到后台
    7. success(data) {
    8. // data为返回值
    9. // 成功后的回调方法
    10. }
    11. })
    12. }
    1. // 后台接值方法
    2. @RequestMapping("/yourUrl")
    3. @ResponseBody
    4. // 在这里我假设大家表单数据与User实体类相对应
    5. public String yourUrl(User user) {
    6. System.out.println(user.toString());
    7. return "SUCCESS";
    8. }

    第四种呢,就是Ajax异步传值最常见的在ajax方法体中使用data进行传值 

    1. // 前台传值方法
    2. function testAjax() {
    3. $.ajax({
    4. type: "post", // 以post方式发起请求
    5. url: "/yourUrl", // 你的请求链接
    6. data: { // 提交数据
    7. "username": "admin", // 前者为字段名,后者为数据
    8. "password": "admin"
    9. },
    10. success(data) {
    11. // data为返回值
    12. // 成功后的回调方法
    13. }
    14. })
    15. }
    1. // 后台接值方法
    2. @RequestMapping("/yourUrl")
    3. @ResponseBody
    4. // 在这里我假设大家表单数据与User实体类相对应
    5. public String yourUrl(@RequestParam("username") String username, @RequestParam("password") String password) {
    6. System.out.println("username="+username+";password="+password);
    7. return "SUCCESS";
    8. }

     后台往前台传值就要简单一些,单个数据或者封装数据可以直接使用return返回json数据给前台,如果是多个数据,可以使用PrintWriter进行传值,具体操作如下

    1. PrintWriter out = response.getWriter();
    2. try {
    3. out.write("yourWillReturnData");
    4. } catch (Exception e) {
    5. e.printStackTrace();
    6. }finally{
    7. out.close();
    8. }
    1. // 无论通过那种方式,只需在前台Ajax得success回调方法中对数据进行处理即可,我们以user为例
    2. success(user){
    3. alert("返回的用户名为:"+user.username+"!!!密码为:"+user.password);
    4. // 在浏览器控制台打印结果,点击f12可以查看
    5. console.log("返回的用户名为:"+user.username+"!!!密码为:"+user.password);
    6. }

    非异步方式传值

    1.与异步方式类似,使用form直接提交或者在链接中拼接参数即可

    1. <!-- form表单提交 -->
    2. <form id="myForm" class="layui-form" action="/yourUrl" method="post">
    3. <input type="text" name="username" required placeholder="邮箱"/>
    4. <input type="password" name="username" required placeholder="密码"/>
    5. <button type="submit" class="layui-btn">登录</button>
    6. </form>
    7. <!-- a标签拼接参数 -->
    8. <a href="/yourUrl?youDataName=yourData">问号传递参数</a>
    9. <a href="/yourUrl/yourData">拼接链接传递参数</a>

    2.后台接受参数方式不变,与异步方式完全相同。 

    1. // 1.可以通过session进行参数传递
    2. @RequestMapping("/yourUrl")
    3. public String yourUrl(HttpServletRequest request) {
    4. // 通过request获取session,然后向session中放入参数key-value
    5. request.getSession().setAttribute("yourDataName", "yourData");
    6. // 跳转到你的视图
    7. return "/yourViews";
    8. }
    9. // 2.可以通过Model进行参数传递
    10. @RequestMapping("/yourUrl")
    11. public String yourUrl(Model model) {
    12. // 向model中加入参数key-value
    13. model.addAttribute("yourDataName", "yourData");
    14. // 跳转到你的视图
    15. return "/yourViews";
    16. }
    17. // 3.同样可以用request进行参数传递
    18. @RequestMapping("/yourUrl")
    19. public String yourUrl(HttpServletRequest request) {
    20. // 通过request放入参数key-value
    21. request.setAttribute("yourDataName", "yourData");
    22. // 跳转到你的视图
    23. return "/yourViews";
    24. }

    EL表达式怎么用?为什么EL表达式不起作用,页面展示为${dataName}? 

    1. <!-- 我们在这里以c标签的for循环为例做演示 -->
    2. <!-- 首先导入c标签 -->
    3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    4. <!-- 编写foreach循环-->
    5. <c:forEach items="${userList}" var="user">
    6. <input type="text" name="username" value="${user.username}"/>
    7. <input type="text" name="password" value="${user.password}"/>
    8. </c:forEach>

    异步请求完成后如何进行跳转?

    1.首先要明确,如果你的视图层全部放在WEB-INF中,那么你的视图层是无法直接进行跳转的,也就是说你不能由一个jsp跳转到另一个jsp,html同理。springboot项目也是一样,如果你是springboot项目,推荐使用thymeleaf模版引擎。

    2.如果你希望在回调成功之后进行页面跳转,可以通过如下代码实现:

    1. // 前台代码
    2. success(user){
    3. alert("返回的用户名为:"+user.username+"!!!密码为:"+user.password);
    4. // 在浏览器控制台打印结果,点击f12可以查看
    5. console.log("返回的用户名为:"+user.username+"!!!密码为:"+user.password);
    6. // 成功回调后进行跳转
    7. window.location.href="/youWantToJumpUrl";
    8. }
    1. // 后台代码
    2. @RequestMapping("/youWantToJumpUrl")
    3. public String youWantToJumpUrl() {
    4. // 跳转到视图层
    5. return "/youWantToJumpView";
    6. // 重定向 return "redirect:/youWantToJumpUrl";
    7. }

     也就是说,如果想要跳转页面或者重定向到某一个方法,必须经过一次控制层才能实现。

     

     

    二、

     

    参考链接 ajax异步传值|前后台传值|EL表达式 - 简书 (jianshu.com)

  • 相关阅读:
    SpringBoot监控@EnableAdminServer
    Linux 中常用的基础命令
    转行自学软件测试没后悔,我的经历证明,改变永远没有错
    input的一些输入限制
    Flume运维中遇到的问题
    docker快速安装redis,mysql,minio,nacos等常用软件【持续更新】
    常用git 打tag命令
    当我们的执行 java -jar xxx.jar 的时候底层到底做了什么?
    计算机网络-IS-IS工作原理之邻接关系建立
    [MySQL]数据库的约束与表的设计
  • 原文地址:https://blog.csdn.net/pachupingminku/article/details/134418506