java - 为什么responsebody注解返回String会导致ajax错误?
问题描述
为什么springmvc返回某种String会导致ajax错误!
当控制器返回像 123 这样的整数时,它工作正常;
当控制器返回像“123”这样的整数字符串时,它工作正常;
当控制器返回像“abc”这样的字符串时,ajax 会出错!
这个问题就像https://www.mkyong.com/jquery/jquery-ajax-request-return-200-ok-but-error-event-is-fired/
这只是对 springmvc 控制器的简单 ajax 请求
ajax 请求
$.ajax({
type: "POST",
url: "/test",
data: JSON.stringify(json),
dataType: "json",
async : false,
contentType: "application/json",
success: function(msg){
alert(msg);
debugger;
result = msg;
},
error: function(msg){
debugger;
alert(msg);
}
})
控制器文件:
@RequestMapping("test")
public String test(){
//return "123"; ajax works fine
return 123; ajax works fine
return "abc"; //ajax parsererror
}
我希望所有类型的字符串都可以,包括像 "abc" 这样的字符串!
谁能帮我 !
谢谢!
解决方案
因为 Json ,123 是一个合格的 JSON,因为它被认为是数字。但是 abc 不是合格的 JSON ,“abc”是合格的 JSON 。SpringMvc 以 abc 而非 "abc" 返回前端 web,因此 ajax 无法解析。
我可以考虑两种解决方案。第一个答案是:使用 Util 类用“abc”装饰 abc;每次返回 String 时,都需要麻烦地这样做。
public class StringUtils {
public static String modifyReturnJson(String str){
return "\""+str+"\"";
}
}
@RequestMapping("/test")
public String test() throws IOException {
return StringUtils.modifyReturnJson("123");
//return "123"; ajax works fine
// return 123; //ajax works fine
// return "abc"; //ajax parsererror
}
第二种方式:删除数据类型:“json”
推荐阅读
- mobile - Flutter Hero 创建重复文本
- python - python中的classOf []等价是什么?
- javascript - 需要自定义模块的问题
- visual-studio - Visual Studio - 关闭解决方案资源管理器的键盘快捷键
- swift - 等待委托回调完成 Swift 中的函数
- linux - TCPv4 源端口和目标端口会相互冲突吗?还是源端口和目标端口位于它们自己的地址空间中?
- r - 如何在 r 中标记重复值 - 新手
- amazon-web-services - AWS 云形成无法有效的实例 ID
- python - 如何使 QComboBox 列表中的文本居中?
- excel - countif 会突然跳过一些值