项目场景:
Springboot开发后端,前端JS及其框架。
问题描述
返回出现[object Object]
原因分析:
Ajax设置的接收数据格式和后端返回的不匹配,或者Ajax设置的数据格式压根不存在。
ajax的dataType的值有以下常见类型:
- “xml”: 返回 XML 文档。
- “html”: 返回纯文本 HTML 信息;
- “script”: 返回纯文本 JavaScript 代码。
- “json”: 返回 JSON 数据 。
- “jsonp”: JSONP 格式。一般是用来处理主流浏览器的跨域数据访问问题。
- “text”: 返回纯文本字符串。
不可以写Int之类的。
dataType: "text",
success: function (data) {
解决方案:
能用Json返回就用Json。如果只要一个执行后的状态,表示成功与否,那么可以返回text。
后端可以返回Int,会自动转换String,需要加上@ResponseBody。
@ResponseBody
@PostMapping("user/changeInfo")
public int changeInfo(
@RequestParam("userName") String userName,
@RequestParam("city") String city,
@RequestParam("sex") String sex, HttpServletRequest rq) throws IOException {
HttpSession session = rq.getSession();
int id = (int) session.getAttribute("id");
// System.out.println(userName + " " + city + " " + sex + " " + id);
if (ud.showOneUser(userName) != null) {
return 1;
}
if (ud.updateInfo(userName, city, sex, id) > 0)
return 0;
return 2;
}
问题描述。
Ajax请求数据后,总是进入error内,不进入success,即使请求完全成功。并且浏览器报404 Not Found错误。
原因分析:
Ajax认为没有成功获取数据,请求失败。
解决方案:
必须加上@ResponseBody
@ResponseBody的作用其实是将java对象转为json格式的数据,然后直接写入HTTP response 的body中;一般在异步获取数据时使用。
@ResponseBody
@PostMapping("user/changeInfo")
public int changeInfo()
问题描述。
使用Get请求时,当uri中有?后,总是报404。
原因分析:
可能是后端路由有问题
解决方案:
Springboot中,@GetMapping注解用来解析uri,不能用@PathParam,即路径参数。
下面是错误代码
@GetMapping("searching/s?keyword={keyword}") // 这是路径参数!!!
@ResponseBody
public ModelAndView search(@PathtParam("keyword") @NotBlank String title, HttpServletResponse response) {
response.addHeader("Access-Control-Allow-Origin", "*");// 允许所有来源访同
response.addHeader("Access-Control-Allow-Method", "POST,GET");// 允许访问的方式
ModelAndView mv = new ModelAndView();
mv.setViewName("search");
return mv;
}
这样写,后端解析会出错
下面是正确的,searching/s?xxx=xxx&xxx=xxx会正确响应。
@GetMapping("searching/s")
@ResponseBody
public ModelAndView search(@RequestParam("keyword") @NotBlank String title, HttpServletResponse response) {
response.addHeader("Access-Control-Allow-Origin", "*");// 允许所有来源访同
response.addHeader("Access-Control-Allow-Method", "POST,GET");// 允许访问的方式
ModelAndView mv = new ModelAndView();
mv.setViewName("search");
return mv;
}