Ajax中get方式url传递中文参数乱码的解决

1. 在使用Ajax的时候使用url传递中文参数在控制器接收的数据是乱码,查了一下资料原因是:

JQuery默认的contentType:application/x-www-form-urlencoded,这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1,ISO8859-1,通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题。

大概的意思是Jquery中使用ISO8859-1编码,在控制器中使用UTF-8来进行解码所以导致了乱码的问题

 

2. 解决办法:

① 在jsp页面中Ajax的url的中使用Jquery的encodeURI()方法可把字符串作为 URI 进行编码,encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码,可以参看下面的例子:

$.ajax({
           type : "GET",
           url :  encodeURI("${APP_PATH}/getAllMajorNameIDAccordingInstituteName?instituteName=" + instituteValue),
           success : function(result){
                $.each(result.map.allMajorNames, function(){
                    var option = $("<option></option>").append(this).attr("value", this);
                    option.appendTo("#add_major");
                });
           }
});

 

② 在后台的控制器中使用utf-8的方式来进行解码:获取参数的时候参数的名字要与之前ajax中使用的参数名字要一样,使用HttpServletRequest来获取jsp页面中传递的参数值

@ResponseBody
    @RequestMapping("/getAllMajorNameIDAccordingInstituteName")
    public Object getAllMajorNameIDAccordingInstituteName(HttpServletRequest request) throws UnsupportedEncodingException{
        String instituteName = new String(request.getParameter("instituteName").getBytes("ISO-8859-1"), "UTF-8");   
        AjaxResult result = new AjaxResult();
        String instituteid = instituteService.queryInstituteNameByInstituteId(instituteName);
        List<String> allMajorIDs = majorService.getAllMajorID(instituteid);
        System.out.println(allMajorIDs);
        List<String> allMajorNames = new ArrayList<String>();
        for(int i = 0; i < allMajorIDs.size(); i++){
            allMajorNames.add(majorService.queryMajorNameByMajorId(allMajorIDs.get(i)));
        }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("allMajorNames", allMajorNames);
        result.setMap(map);
        result.setRes(true);
        return result;
    }

我们可以在控制台中打印出重新编码之后的参数的名字就知道中文的乱码有没有解决了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值