关于response.getWriter().write()返回int类型给前台的乱码问题

本文介绍了一种在使用Ajax从前端获取后台int类型数据时遇到的乱码问题及其解决方案。通过将int类型转换为String类型并传递,可以有效避免乱码情况的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚因为网页前台需要用ajax来获取后台的数据,后台传给前台的数据是int类型的,放在了response.getWriter().write()中,并没有错,但是前台中获得的数字是乱码的,在ie浏览器中获取到的是一个小方块,火狐浏览器获得的是个小方框里一串数字。

从网上查了好像是后台编码的问题,然后后台添加了过滤器

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

然而并没有什么用,看还有那个用response.setContentType("text/html;charset=utf-8"),然而也并没有用。

解决办法:

int result=1;

response.getWriter().write(result+"");

把int类型转换成了String类型,这样就成功解决了这个问题。

具体的原理不是很清楚,好像是write()内部会自动进行类型转换的问题,特此记录一下。

如何将其与以下后端代码相匹配,即不改变后端代码的前提下,使得http页面的抽卡结果在后端生成,http页面的其他功能跟之前一样。以下为后端代码(s代表5星,a代表4星,b代表三星):package com.Controller; import com.entity.User; import com.jdbc.UserDao; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.sql.Timestamp; @WebServlet("/recordCardDraw") public class RecordCardController extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); String cardResult; if (user != null) { UserDao userDao = new UserDao(); User refreshedUser = userDao.queryUserById(user.getId()); int drawingTimes = refreshedUser.getDrawingtimes(); // 判断是否触发保底 if (drawingTimes >= 19) { int b = (int) (Math.random() * 1000); if(b<500){ cardResult = "S1"; } else { cardResult = "S2"; } } else { // 正常抽卡逻辑:随机生成结果 int a = (int) (Math.random() * 1000); if(a<25){cardResult = "S1";} else if(a<50){cardResult = "S2";} else if(a<80){cardResult = "A1";} else if(a<110){cardResult = "A2";} else if(a<140){cardResult = "A3";} else if(a<160){cardResult = "A4";} else if(a<200){cardResult = "A5";} else if(a<360){cardResult = "B1";} else if(a<520){cardResult = "B2";} else if(a<680){cardResult = "B3";} else if(a<840){cardResult = "B4";} else {cardResult = "B5";} } // 更新抽卡次数 userDao.updateDrawingTimes(user.getId()); // 抽到SSS就重置次数 if ("S1".equals(cardResult)||"S2".equals(cardResult)) { userDao.resetDrawingTimes(user.getId()); } //获取当前时间 Timestamp cardtime = new Timestamp(System.currentTimeMillis()); // 记录结果 userDao.recordCardDraw(user.getId(), cardResult, cardtime.toLocalDateTime()); // 返回抽卡结果给前端 response.setContentType("application/json"); response.getWriter().write("{\"status\":\"success\",\"cardResult\":\"" + cardResult + "\"}"); return; } // 如果用户未登录或错误 response.setContentType("application/json"); response.getWriter().write("{\"status\":\"error\"}"); } }
最新发布
07-13
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值