使用Ajax时[object%20object] 和POST http://localhost:8080/back/cateadd 415报错的解决方案

571 阅读1分钟

出现问题

Question1

以前经常用 【$.ajax 没有出现过这种情况,按F12控制台出现[object%20object],这次换成了$.post,网上查阅了一番死马当活马医,将post改成ajax成功不报错 借助这篇博文(www.cnblogs.com/windowsxpxp… 解决了问题

Question2

HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)

参考:(blog.csdn.net/kingtracy8/… 虽然不是同一个问题吧,但是让看看到了

contentType : 'application/json;charset=UTF-8

以前老爱粘贴代码(太久没敲了,忘了这个,添上就好了,还是要注意细节!!)

Question3

400 是 HTTP 的状态码,主要有两种形式:

  • 1、bad request 意思是 "错误的请求";
  • 2、invalid hostname 意思是 "不存在的域名"。

400 Bad Request 是由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。

在 ajax 请求后台数据时比较常见。产生 HTTP 400 错误的原因有:

  • 1、前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装;
  • 2、前端提交的到后台的数据应该是 json 字符串类型,而前端没有将对象转化为字符串类型;

参考(www.runoob.com/w3cnote/htt…

以下我的代码 ————— ————— —————— ———— — ——————— ——— ———— —— — ——— ——

$.ajax({
    type:'post',
    url: "/back/cateadd",
    data: {
        parentId : parseInt($("[name='parentId']").val()),
        cname: $("[name='cname']").val()
    },
    dataType : 'json',
    contentType : 'application/json;charset=UTF-8',
    success: function (data) {
        if (data.code == 200)
            alert("成功")
    }
})
@RequestMapping("/cateadd")
    @ResponseBody
    public Map<String, Object> cateAdd(String cname,Integer parentId){
//        log.info("添加的分类为:{}",category);
        Category category = new Category();
        category.setCname(cname);
        category.setParentId(parentId);
        QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
        //添加限制条件为1条,多个结果集会报错
        queryWrapper.eq("cname",category.getCname()).last("LIMIT 1");
        Category one = cateService.getOne(queryWrapper);
//        log.info("查询结果{}",one);
        Map<String, Object> map = new HashMap<>();
        //判断分类是否存在
        if (one==null){
            cateService.save(category);
            map.put("code",200);
        }else {
            map.put("code",410);
        }
//        return "redirect:/back/cate";
        return map;
    }

说实话我真没看出有啥错,绝望之际,我翻到了这个(www.cnblogs.com/bdss/p/6168… 大概就是serialize()后的数据都是String的字符串,到后台那边用requestbody接收要类型和属性名一毛一样。最终测试修改如下:

function x_admin_show(){
    layui.use(['jquery', 'excel','form','layer','laydate'], function() {
        layer.open({
            type: 1,
            area: ['500px', '300px'],
            title: '添加种类',
            content: $('#test'),
            shade: 0,
            btn: ['提交']
            , btn1: function (index, layero) {
                var paramObj = {
                    parentId : parseInt($("[name='parentId']").val()),
                    cname: $("[name='cname']").val()
                };

                $.ajax({
                    type:'post',
                    url: "/back/cateadd",
                    data: JSON.stringify(paramObj),
                    dataType : 'json',
                    contentType : 'application/json;charset=UTF-8',
                    success: function (data) {
                        if (data.code == 200){
                            alert("成功")
                            layer.closeAll();
                        }

                    }
                })
            },

            cancel: function (layero, index) {
                layer.closeAll();
            }
        })
    })
}
@RequestMapping("/cateadd")
    @ResponseBody
    public Map<String, Object> cateAdd(@RequestBody Category category){
//        log.info("添加的分类为:{}",category);
     /*   Category category = new Category();
        category.setCname(cname);
        category.setParentId(Integer.parseInt(parentId));*/
        System.out.println(category);
        QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
        //添加限制条件为1条,多个结果集会报错
        queryWrapper.eq("cname",category.getCname()).last("LIMIT 1");
        Category one = cateService.getOne(queryWrapper);
//        log.info("查询结果{}",one);
        Map<String, Object> map = new HashMap<>();
        //判断分类是否存在
        if (one==null){

            cateService.save(category);
            map.put("code",200);
        }else {
            map.put("code",410);
        }
//        return "redirect:/back/cate";
        return map;
    }