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…

go编译执行文件

1、如果进行单个文件编译go build xxx.go 2、批文件编译 不实际编译它&#xff0c;只输出它的编译过程&#xff1a; 1 go build -n 简单的编译过程分析&#xff1a; 上面的过程确认了两个事情&#xff1a; Runtime会永远随着用户代码一起编译在windows平台上编译出来了一…

昇思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值给他负导…

【Qt和OpenCV 概述】

Qt和OpenCV(Open Source Computer Vision Library)都是广泛用于计算机视觉应用的强大工具,而将它们结合使用,可以在Qt应用程序中实现复杂的视觉处理功能。Qt是跨平台的GUI库,而OpenCV则是专为计算机视觉任务设计的库。下面是Qt和OpenCV结合使用的一些概述: 为什么结合使…

为什么需要第三方支付

1.第三方支付平台提供一系列的应用接口程序&#xff0c;将多种银行卡支付方式整合到一个界面上&#xff0c;负责交易结算中与银行的对接&#xff0c;使网上购物更加快捷、便利。第三方支付整合了后端各大银行的不同支付接口&#xff0c;对外提供统一的接入平台&#xff0c;方便…

【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% 以上,支持题目在线…

日常学习--调用第三方接口和提供第三方接口时的注意事项--20240728

1、调用第三方接口的注意事项 接口测试与验证&#xff1a; 对第三方接口进行充分的测试&#xff0c;包括功能测试、性能测试和安全测试&#xff0c;确保接口的稳定性和安全性。 验证接口的可用性&#xff0c;包括接口地址、请求方式、请求参数、响应格式等是否正确。 参数校…

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…

easyui 点击单元格的时候,获取该行另外一个字段的值

在 EasyUI DataGrid 中,你可以通过绑定 ​​onClickCell​​ 事件来获取点击单元格所在行的其他字段的值。以下是具体的实现步骤和示例代码: 1. 初始化 DataGrid 首先,确保你已经初始化了一个 DataGrid,并填充了一些数据。 <!DOCTYPE html> <html> <head…

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

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

C++第五次作业

题目&#xff1a; 自实现myFind()函数&#xff0c; 在某个字符串str中查找子字符串str_key的位置&#xff0c;&#xff0c;如果找到&#xff0c;返回子字符串所出现的第一个位置的下标&#xff0c;如果没找到&#xff0c;返回-1。 例如 abcdefgabcdefg (str) def (str_key) 3 q…

西方2000年文明史

西方2000年文明史 PoliticsEconomyCultureScienceMathematicsPhysicsChemistryBiologyMedicineEngineeringArtMusicComputer Science / Information Technology The contributions of Western civilization over the past 2000 years span a wide range of fields, from politi…

flutter自定义icon

从iconfont-阿里巴巴矢量图标库下载自己的选好的图标库 复制ttf文件到 fonts目录下&#xff0c;如&#xff1a;D:\dev\Android\apps\ichat\fonts\my_iconfont.ttf 在pubspec.yaml里面配置 flutter&#xff1a; fonts:- family: my_iconfonts:- asset: fonts/my_icon_font.t…

Python入门知识点 9--函数作用域与名称空间

一、练习答案 项目名称: 上一篇练习 项目描述: 练习答案 项目环境: python3.8.10 作者所属: 小赵 # 1.定义一个函数,内容为输出一句(人生苦短,我选python),并调用该函数 def talk():print(人生苦短,我选python) talk()# 2.定义一个函数,该函数在调用的时候会接收2个数值数据&am…