1. 情况描述: Ajax 发送成功, 后台也成功响应请求, 并返回了 JSON 数据, 通过 Chrome 监听请求也可以看到响应的 JSON 数据, 但是就是不进 success 方法, 反而跑到 error 方法中了
前端:
- $.Ajax({
- type : "get",
- data : {'dbId':node.dbId,'viewId':node.id,'date':new Date()},
- url : "${ctp}/ViewOperate/ShowViewSql",
- dataType : "json",
- success : function(data){
- console.log(data);
- layer.alert(data,{
- skin: 'layui-layer-molv'
- });
- }
- error : function(data){
- layer.alert("进入了 error 方法",{
- skin: 'layui-layer-molv'
- });
- }
- });
后端:
- @RequestMapping(value="/ShowViewSql",method=RequestMethod.GET)
- @ResponseBody
- public String showCreateViewSql(@RequestParam(value="dbId",required=false)Integer dbId,
- @RequestParam(value="viewId",required=false)Integer viewId) {
- return "abc";
- }
原因: 后台返回的 JSON 数据是一个纯 String 类型的对象时, 前端 dataType 属性设置为 JSON 后, 会认为这个由 String 对象转换的 JSON 数据格式不是标准的 JSON 格式, 所以就去执行 error 对应的方法了.
解决: 后端不用改, 只需要把前端 Ajax 请求中的 dataType 属性设置为 text 即可
- $.Ajax({
- type : "get",
- data : {'dbId':node.dbId,'viewId':node.id,'date':new Date()},
- url : "${ctp}/ViewOperate/ShowViewSql",
- dataType : "text",
- success : function(data){
- console.log(data);
- layer.alert(data,{
- skin: 'layui-layer-molv'
- });
- }
- error : function(data){
- layer.alert("进入了 error 方法",{
- skin: 'layui-layer-molv'
- });
- }
- });
特殊情况: 当后端返回的 JSON 数字是类似 "1","2","22","232123","-1", "232123.44" 数字字符串的时候, 前端 dataType 属性设置为 JSON 时, 也能正常进入 success 方法, 原因不明.
来源: http://www.bubuko.com/infodetail-3653483.html