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

目录

一、问题分析

二、处理问题


一、问题分析

  • 在测试员工管理系统的登录和注册代码时,登录一切正常,就是注册成功后没有跳转页面,后面发现是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 {@Autowiredprivate 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.mzph.cn/bicheng/51459.shtml

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

相关文章

【C++BFS算法 二分查找】2812. 找出最安全路径

本文涉及知识点 CBFS算法 C二分查找 LeetCode2812. 找出最安全路径 给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid &#xff0c;其中 (r, c) 表示&#xff1a; 如果 grid[r][c] 1 &#xff0c;则表示一个存在小偷的单元格 如果 grid[r][c] 0 &#xff0c;则表示一…

Windows配置AirSim过程(学习过程)

一、概述 因为需要在虚幻引擎当中使用AirSim&#xff0c;在Windows系统上进行操作&#xff0c;根据官方网站的操作过程&#xff0c;进行了配置&#xff0c;这里作为自己配置过程的记录。 二、具体过程 &#xff08;一&#xff09;系统版本 操作系统是Windows11&#xff0c;Ai…

昇思MindSpore 应用学习-RNN实现情感分类-CSDN

RNN实现情感分类 AI代码解析 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入…

HALCON如何创建本地函数

HALCON中有本地函数(.hdev)、外部函数(HDevelop函数文件.hdvp)和库函数(.hdpl) 本地函数(.hdev)&#xff1a;创建后仅在当前程序文件中使用&#xff1b; 外部函数(HDevelop函数文件.hdvp)&#xff1a;创建后可以在其他程序文件中复用&#xff0c;默认保存在…/ procedures/下…

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

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

【C++语言】C++11新特性(1)

一、统一的列表初始化 1.1 {} 初始化 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如&#xff1a; struct Point {int _x;int _y; };int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };ret…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 项目排期安排(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

C++使用MD5对字符串加密,获取文件的MD5值(附完整源码)

目录 1、为什么要使用MD5? 2、开源MD5类 3、获取字符串MD5值的MD5String接口封装 4、获取文件MD5值的MD5File接口封装 5、最后 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C…

OSPF动态路由协议实验

首先地址划分 一个骨干网段分成三个&#xff0c;r1&#xff0c;r2&#xff0c;r5三个环回网段 &#xff0c;总共要四个网段 192.168.1.0/24 192.168.1.0/26---骨干网段 192.168.1.0/28 192.168.1.16/28 192.168.1.32/28 备用 192.168.1.64/28 192.168.1.64/26---r1环回 192.1…

【Vulnhub系列】Vulnhub_DC-1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_DC-1靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境准备 1、在百度网盘中下载DC-1靶场。DC-1靶场受virtual box 的影响&#xff0c;在VM中直接打开是扫描不到IP 的…

【Vulnhub系列】Vulnhub_SecureCode1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_SecureCode1靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境配置 1、从百度网盘下载对应靶机的.ova镜像 2、在VM中选择【打开】该.ova 3、选择存储路径&#xff0…

Mathtype7.8中文版远程安装并嵌入word(包成功)

Mathtype7.8是一款专业的数学公式编辑工具&#xff0c;能够帮助用户在各种文档中插入复杂的数学公式和符号。数学公式编辑器工具可以轻松输入各种复杂的公式和符号&#xff0c;与Office文档完美结合&#xff0c;显示效果超好&#xff0c;比Office自带的公式编辑器要强大很多。M…

obsidian 首页制作 辅助笔记总结回顾

记笔记最重要的是回顾与总结&#xff0c;有这么一款插件可以让我们自己搭建一个美观的首页&#xff0c;它包括热力图、文稿统计、文稿回顾等等功能&#xff0c;你是否愿意尝试呢&#xff1f; 今天就介绍一款插件&#xff0c;能快速制作笔记首页&#xff0c;辅助总结、回顾。 …

sql注入详解【从数据库架构分析】

简介 SQL注入是一种常见的Web应用程序安全漏洞&#xff0c;它允许攻击者在Web应用程序中插入恶意SQL语句&#xff0c;从而操纵数据库执行非授权的操作。这种攻击利用了应用程序在处理用户输入时的不足&#xff0c;特别是当应用程序直接将用户输入作为SQL语句的一部分使用&…

聊聊基于Alink库的特征工程方法

独热编码 OneHotEncoder 是用于将类别型特征转换为独热编码的类。独热编码是一种常用的特征编码方式&#xff0c;特别适用于处理类别型特征&#xff0c;将其转换为数值型特征。 对于每个类别型特征&#xff0c;OneHotEncoder 将其编码成一个长度为类别数量的向量。 每个类别对…

数据库实验:SQL Server基本表单表查询

一、实验目的&#xff1a; 1、掌握使用SQL语法实现单表查询 二、实验内容&#xff1a; 1. 查询订购日期为2001年5月22日的订单情况。&#xff08;Orders&#xff09;&#xff08;时间日期的表达方式为 dOrderDate ‘2001-5-22’&#xff0c;类似字符串&#xff0c;使用单引号…

NumpyPandas:Pandas库(50%-100%)

目录 前言 一、排序 1.使用索引排序 2.使用变量值排序 二、计算新变量 1.新变量为常量 2.根据原变量新增列 3.基于一个原变量做函数运算 4.在指定位置插入新列 三、修改替换变量值 1.对应数值替换 2.指定范围替换 四、虚拟变量变换 五、数值变量分组 六、数据分组…

构建大规模账号池与本地部署:GitHub爬虫项目详解

账号池搭建 必要性 常见登录方式&#xff1a; 基于Session Cookie的登录基于JWT的登录&#xff1a;登录生成JWT字符串 账号池存储cookie或者JWT字符串 方便后续发请求爬取数据 本地部署 conda建立一个虚拟环境 conda create -n new_env python3.x # 替换 x 为你需要的 P…

Python3网络爬虫开发实战(7)JavaScript 动态渲染页面爬取

文章目录 一、Selenium1. 基本安装2. 基本使用3. 声明浏览器对象4. 访问页面5. 查找节点6. 节点交互7. 动作链8. 执行 JavaScript9. 获取节点信息10. 切换 Frame11. 延时等待12. 前进后退13. Cookies14. 选项卡管理15. 异常处理16. 反屏蔽17. 无头模式18. Pyppeteer&#xff0c…