ajax请求成功但不执行success-function回调函数

news2024/11/16 6:42:31

目录

一、问题分析

二、处理问题


一、问题分析

  • 在测试员工管理系统的登录和注册代码时,登录一切正常,就是注册成功后没有跳转页面,后面发现是success-function回调函数没有正常执行。
  • 原因主要是前端和后端交流的数据格式不一致,前端需要的JSON格式的数据,但后端返回的不是JSON格式的数据。
  • 具体可以检查跟后端返回数据格式相关的部分代码,比如控制器、结果封装类,前端页面等
  • 添加error部分,发现是后端返回的result对象出问题
  • 进而检查控制器代码
  • 参考文章:
    • 1、javascript - ajax的success: function (data)不执行怎么回事? - SegmentFault 思否
    • 2、ajax请求成功但不执行success-function回调函数 - 余生大大 - 博客园 (cnblogs.com)
    • 3、Ajax请求成功, 但进不去success方法 - Vitoboy - 博客园 (cnblogs.com)
    • 4、

二、处理问题

  • 控制器少了@RequestBody
  • @ResponseBody 注解用于直接将方法返回的对象序列化为 JSON 或其他格式的数据返回给客户端。
  • 部分代码如下

 控制器

@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @ApiOperation("注册")
    @ResponseBody
    @RequestMapping(value = "/register",method = RequestMethod.POST)
    public CommonResult register(@RequestBody User user,HttpServletRequest request,HttpServletResponse response){
        CommonResult commonResult = new CommonResult();
        //校验参数是否为空
        if(user == null || StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getPassword())){
            commonResult.setCode(CommonCode.FAIL);
            commonResult.setMsg("用户名和密码不能为空!!");
            return commonResult;
        }
        User userByUsername = userService.getUserByUsername(user.getUsername());
        if(userByUsername != null){
            commonResult.setCode(CommonCode.FAIL);
            commonResult.setMsg("用户名已经存在!!");
        }else{
            //更新新用户创建时间
            user.setCreatetime(new Date());
            //存储加密后的新用户信息
            int result = userService.addUser(user);
            if(result == 1){
                commonResult.setCode(CommonCode.SUCCESS);
            }else{
                commonResult.setCode(CommonCode.FAIL);
                commonResult.setMsg("系统原因,请重试或联系管理员!!");
            }
        }
        return commonResult;
    }
}

结果封装类

package com.study.hrms.common;
import java.util.List;

/**
 * 用于封装接口返回结果的通用格式,包括状态码,消息和数据
 */
public class CommonResult {

    public int code;//状态码
    public String msg;
    public Object data;

    /**
     * 不同参数的构造函数
     */
    public CommonResult(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public CommonResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public CommonResult() {
    }

    /**
     * 静态方法,创建对象并返回结果的通用格式
     */
    public static <T extends Object> CommonResult success(List<T> list){
        CommonResult commonResult = new CommonResult();
        commonResult.setCode(CommonCode.SUCCESS);
        commonResult.setData(list);
        return commonResult;
    }

    public static <T extends Object> CommonResult success(Object data){
        CommonResult commonResult = new CommonResult();
        commonResult.setCode(CommonCode.SUCCESS);
        commonResult.setData(data);
        return commonResult;
    }
    public static <T extends Object> CommonResult success(){
        CommonResult commonResult = new CommonResult();
        commonResult.setCode(CommonCode.SUCCESS);
        return commonResult;
    }
    public static CommonResult fail(String msg){
        CommonResult commonResult = new CommonResult();
        commonResult.setCode(CommonCode.SUCCESS);
        commonResult.setMsg(msg);
        return commonResult;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

注册页面

<!DOCTYPE html>
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %>
<%@ include file="common/taglibs.jsp" %>

<html lang="zh">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>员工管理系统-注册</title>
    <%@ include file="common/meta.jsp" %>
    <link rel="stylesheet" href="/static/css/views/login.css" media="all"/>
</head>
<body>
<!-- Head -->
<!-- Head End -->

<!-- Carousel -->
<!-- Carousel End -->

<!-- Footer -->
<!-- Footer End -->



<!-- LoginForm -->
<div class="login_main">
    <fieldset class="layui-elem-field layui-field-title hazel_mar_02">
        <legend>员工管理系统注册</legend>
    </fieldset>
    <div class="layui-row layui-col-space15">
        <form class="layui-form hazel_pad_01" action="">
            <div class="layui-col-sm12 layui-col-md12">
                <div class="layui-form-item">
                    <input type="text" name="username" lay-verify="required|userName" autocomplete="off" placeholder="账号" class="layui-input">
                    <i class="layui-icon layui-icon-username login_icon"></i>
                </div>
            </div>
            <div class="layui-col-sm12 layui-col-md12">
                <div class="layui-form-item">
                    <input type="password" name="paword" lay-verify="required|pass" autocomplete="off" placeholder="密码" class="layui-input">
                    <i class="layui-icon layui-icon-password login_icon"></i>
                </div>
            </div>
            <div class="layui-col-sm12 layui-col-md12">
                <div class="layui-form-item">
                    <input type="password"  lay-verify="required|confirmPass" autocomplete="off" placeholder="确认密码" class="layui-input">
                    <i class="layui-icon layui-icon-password login_icon"></i>
                </div>
            </div>
            <div class="layui-col-sm12 layui-col-md12">
                <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="go">注册</button>
            </div>
            <div class="layui-form-mid layui-word-aux"><a href="/loginPage">登录</a></div>
            <div class="layui-form-mid layui-word-aux hint">
                <span id="registermsg"></span>
            </div>
        </form>
    </div>
</div>
<script>
    layui.use('form', function () {//加载form模块
        var form = layui.form;
        var $ = layui.$;
        form.verify({
            confirmPass:function(value){
                if($('input[name=paword]').val() !== value){
                    console.log($('input[name=paword]').val()+":"+value);
                    $("#registermsg")[0].innerHTML = '两次密码输入不一致!';
                    return "false";
                }
            }
        });
        //submit登录按钮
        form.on('submit(go)', function (data) {
            var user = {};//构造user对象,传递参数
            user.username = $("input[name=username]").val();
            user.password = hex_md5($("input[name=paword]").val());//密码使用MD5加密
            $.ajax({
                url: "/register",
                type: "POST",
                data: JSON.stringify(user),//传递json类型的参数
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (result) {
                    if(result.code == COMMON_SUCCESS_CODE){
                        location.href = '/login'
                    }else{
                        $("#registermsg")[0].innerHTML = result.msg;
                    }
                }
            })
            return false;//拦截layui自带的提交
        })
    });

</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1956500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GNSS位移监测站:毫米级位移监测

推荐型号&#xff1a;TH-WY1】GNSS位移监测站是一种利用全球导航卫星系统&#xff08;GNSS&#xff09;进行高精度位移监测的设备。这些系统能够实现毫米级甚至亚毫米级的位移监测&#xff0c;广泛应用于大坝安全监测、桥梁健康检测、滑坡预警等领域。以下是GNSS位移监测站的主…

电力红外热成像手持终端是什么?有什么作用?

电力红外热成像手持终端&#xff0c;即手持红外热成像仪&#xff0c;在电力行业中扮演着重要角色。这种设备利用红外辐射技术实时捕捉物体&#xff08;特别是电力设备&#xff09;表面的热能分布&#xff0c;并将其转化为可视化的热像图&#xff0c;从而帮助用户进行非接触式的…

Llama3代码库一夜成名,Kapathy一键点赞,GitHub星标突破2千

让大神 Andrej Karpathy 一键三连❤️&#xff08;点赞 转发 评论&#xff09;&#xff0c;一个教你从头开始实现 Llama3 的代码库爆火。 X 上转赞收藏量超 6.8k&#xff0c;GitHub 揽星 2k。 火就火在&#xff0c;它教你从头用 Meta 开源的权重进行推理&#xff0c;详细解释…

InternLM-L0 Python作业

任务类型 任务内容 闯关任务 Python实现wordcount 闯关任务 Vscode连接InternStudio debug笔记 1. Python实现wordcount 基于作业 InternLM-L0 linux作业 &#xff0c;创建Python文件输入如下代码&#xff0c;并用Python 脚本运行&#xff1a; text """ Go…

新手vue学习问题汇总(自用)(长期更新)

1.export default export default 是 ES6 模块语法&#xff0c;用于导出模块的默认成员。在 Vue.js 中&#xff0c;通常用来导出一个组件对象&#xff0c;使其可以在其他文件中被导入并使用。 2.props props 是组件接收外部数据的方式。父组件可以通过向子组件传递 props 来…

电阻上的数字意义及电阻值辨别方法

电阻是电子电路中的基本元件&#xff0c;其阻值的大小直接影响电路的工作状态。电阻上的数字信息对于电路设计和维修至关重要。本文将详细解读电阻上数字的意义&#xff0c;并介绍如何通过数字辨别电阻值。 一、电阻上数字的意义 电阻上的数字通常表示电阻的阻值、功率、误差等…

C++STL详解(五)——list类的接口详解

一.list的介绍 list容器的底层是双向循环带头链表&#xff0c;在CPP中&#xff0c;我们对双向循环带头链表进行了一定程度的封装。 如果你不了解双向链表&#xff0c;那么可以浏览此片博文&#xff1a;双向链表 二.list的定义方式以及赋值 2.1list的构造方式 在这里我们要…

Redis:事务

1. 简介 可以一次性执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c;按顺序的串化执行&#xff0c;不允许被其他其他命令插入&#xff0c;不许加塞 即将要执行的命令放入队列中&#xff0c;此时该队列的所有命令就是一个事务&#x…

接口自动化中对于文件上传的处理方法

正常的接口自动化基本都是json的格式&#xff0c;对于文件上传是一种特殊的格式是表单格式针对这种表单格式在接口自动化中怎么处理&#xff0c;主要通过工作中使用的一个实际的例子进行分享 举例&#xff1a;web上需要导入一个文件实现相关的功能&#xff0c;主要通过两个接口…

vue实现滚动条下滑时隐藏导航栏,上滑时显示导航栏

效果展示 思路 监听滚动事件&#xff0c;记录上次的滚动距离&#xff0c;与最新滚动距离做对比&#xff0c;如果为正&#xff0c;说明滚动距离距顶值scrollTop变大&#xff0c;用户正在向下滚动页面&#xff0c;此时隐藏&#xff0c;反之则反&#xff0c;隐藏就是top值给他负导…

Linux网络-netstat命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器&#xff0c;主要的作用就是向客户端提供网络…

地球磁场的形成、变迁、特点

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Python如何统治AI世界?一文读懂它的优势与挑战

一、Python语言介绍 1.1 Python语言概述 Python是一种由Guido van Rossum于1991年首次发布的高级编程语言。其设计理念强调代码的可读性和简洁性&#xff0c;使其成为了许多开发者的首选语言。Python的语法简洁直观&#xff0c;采用了缩进来定义代码块&#xff0c;这与其他使…

应力对薄膜有什么影响?

知识星球里的学员问&#xff1a;在薄膜沉积中&#xff0c;应力是一个经常要监控的参数&#xff0c;它有什么作用&#xff1f;应力过大对薄膜有哪些影响&#xff1f; 应力是什么&#xff1f; 薄膜的应力是指在薄膜沉积过程中&#xff0c;薄膜内部或薄膜与基材之间产生的作用力。…

3Dtiles文件是否可以直接合并?

答&#xff1a;无法直接合并。网格大师有3dtiles转osgb的功能&#xff0c;先转osgb&#xff0c;然后把osgb放在一起之后再转3dtiles。 网格大师是一款能够解决实景三维模型空间参考、原点、瓦块大小不统一&#xff0c;重叠区域处理问题的工具“百宝箱”&#xff0c;集格式转换…

大数据:数据标准化及质量管控方案

本方案是一套全面的解决方案&#xff0c;旨在为企业构建科学、规范的数据管理体系&#xff0c;确保数据的准确性、一致性、完整性、合理性、及时性和有效性&#xff0c;从而支撑业务数据的高效应用与正确决策。以下是对该方案的详细介绍&#xff1a; 一、方案概述 本数据标准…

Redis八股文(二)

目录 21.Redis如何实现服务高可用&#xff1f; 22.什么是集群中的脑裂&#xff1f; 23.脑裂导致数据丢失怎么办&#xff1f; 24.Redis使用的过期删除策略是什么&#xff1f; 25.什么是惰性删除&#xff1f; 26.什么是定期删除&#xff1f; 27.Redis持久化时&#xff0…

超级详细的SpringSecurity

文章目录 概述与shiro对比快速入门底层原理FilterDelegatingFilterProxyFilterChainProxySecurityFilterChainMultiple SecurityFilterChain 自定义登录流程解析基于内存的用户认证实现基于数据库的用户登录 实现用户新增功能controllerservice修改配置关闭csrf攻击防御修改默认…

python拼接字符串方法

文章目录 1. 使用加号&#xff08;&#xff09;2. 使用str.join()方法3. 使用格式化字符串&#xff08;f-strings, % 操作符, .format() 方法&#xff09;4. 使用列表推导式和join()结合 性能对比 在Python中&#xff0c;字符串拼接是将两个或多个字符串合并成一个新字符串的过…

C++初学(3)

面向对象编程&#xff08;OOP&#xff09;的本质是设计并拓展自己的数据类型&#xff0c;设计自己的数据类型就是让类型与数据匹配。内置的C类型分为两组&#xff1a;基本类型和复合类型。这里我们将介绍基本类型的整数和浮点数 3.1、简单变量 3.1.1、变量名 C必须遵循几种简…