ajax传递中文参数问题。

写代码要修改用户的信息,写了三个ajax,第一个写完测试没有问题,后面俩逻辑一样的就直接赋值了,结果复制的第二个不好使。中文会出现%乱码

                          $.ajax({ //返回参数正常
                            url: '/editAdmin/' + id + '/' + userName + '/' + password,
                            type: 'post',
                            contentType:'application/json;charset=utf-8',
                            dataType: 'text',
                            data: {
                                'id': id,
                                'userName': userName,
                                'password': password,
                            },
                            success: function (res) {
                                if (res == "success") {
                                    layer.msg('提交成功');
                                } else {
                                    layer.msg("提交失败");
                                }
                            }
                        })
                        $.ajax({//中文参数乱码
                            url: '/editTeach/' + teacherId + '/' + userName + '/' + age + '/' + sex + '/' + dept + '/' + phone + '/' + professional,
                            type: 'post',
                            contentType: 'application/json;charset=utf-8',
                            dataType: 'text',
                            data: {
                                'teacherId': teacherId,
                                'userName': userName,
                                'age': age,
                                'sex': sex,
                                'dept': dept,
                                'phone': phone,
                                'professional': professional
                            },
                            success: function (res) {
                                if (res == "success") {
                                    layer.msg('提交成功');
                                } else {
                                    layer.msg("提交失败");
                                }
                            }
                        })

在第二个ajax之前打印要传递的参数是可以获取到的,没有乱码,一进ajax就乱码了。三个ajax基本都是一样的其他两个都能传中文参数。
img


                        $.ajax({
                            url: '/editStu/' + studentNumber + '/' + userName + '/' + age + '/' + studentClass + '/' + grade,
                            type: 'post',
                            dataType: 'text',
                            contentType: 'application/json;charset=utf-8',
                            data: {
                                'studentNumber': studentNumber,
                                'userName': userName,
                                'age': age,
                                'studentClass': studentClass,
                                'grade': grade
                            },
                            success: function (res) {
                                if (res == "success") {
                                    layer.msg('提交成功');
                                } else {
                                    layer.msg("提交失败");
                                }
                            }
                        })

controller代码

    @RequestMapping("/editStu/{studentNumber}/{userName}/{age}/{studentClass}/{grade}")
    @ResponseBody
    public String editStu(@PathVariable("studentNumber") int studentNumber, @PathVariable("userName") String userName, @PathVariable("age") int age, @PathVariable("studentClass") String studentClass, @PathVariable("grade") int grade) {
        int res = userService.updateStudent(studentNumber, userName, age, studentClass, grade);
        if (res > 0) {
            return "success";
        } else {
            return "fail";
        }
    }

    @RequestMapping("/editTeach/{teacherId}/{userName}/{age}/{dept}/{phone}/{professional}")
    @ResponseBody
    public String editTeach(@PathVariable("teacherId") int teacherId, @PathVariable("userName") String userName, @PathVariable("age") int age, @PathVariable("dept") String dept, @PathVariable("phone") String phone,  @PathVariable("sex") String sex,@PathVariable("professional") String professional) {
        int res = userService.updateTeacher(teacherId, userName, age, dept, phone, sex,professional);
        if (res > 0) {
            return "success";
        } else {
            return "fail";
        }
    }

    @RequestMapping("/editAdmin/{id}/{userName}/{password}")
    @ResponseBody
    public String editAdmin(@PathVariable("id") int id,@PathVariable("userName")String userName,@PathVariable("password")String password){
        int res = userService.updateAdmin(id,userName,password);
        if (res > 0) {
            return "success";
        }else {
            return "fail";
        }
    }

你的接口既然post传参了,为什么还要在url上加各种参数?你打印你下你的那些参数是不是都有值

array:encodeURI,后端接收用decodeURI。
https://blog.csdn.net/junyu1024/article/details/80528454

url是固定的,后台给你的什么就写什么,不需要手动拼接,就算拼接,你携带参数的时候它们会自己拼接在后边的(get,、delete请求才会),并且以 ?key=value&key=value的形式
例如 /editAdmin?id=1&userName=张三&password=123, 这是最终的表现形式,不需要刻意去写成这样,只需要写url和data即可

第一次见到post请求传json还在url上面拼接的

你确认下是不是base64编码,另外,既然使用post请求,那么请求参数放在请求体中即可