关于AJAX/GET请求乱码的问题

4 篇文章 0 订阅

     AJAX的GET请求参数中若存在中文等非“ASCII字符”时,服务端在解析请求参数时,如果仅通过request.getParameter(参数key)方法获取参数值,而不进行相关处理,获得值中就会出现乱码的问题。如以下请求:

  •   GET请求时

	param["taskName"] = "任务1";	
	$.ajax({ 
		url : nfmTools.remoteAddress + "doGET", 
		data : param,
		cache : false, 
		async : false, 
		type : 'GET', 
		dataType : 'json', 
		success : function(rsp) 
		{
		});

	@RequestMapping(value = "doGET", method = RequestMethod.GET)
	@ResponseBody
	public void doGet(HttpServletRequest request){
		String name = request.getParameter("taskName");
		System.out.println(name);
	}


  • POST请求时

	param["taskName"] = "任务1";	
	$.ajax({ 
		url : nfmTools.remoteAddress + "doGET", 
		data : param,
		cache : false, 
		async : false, 
		type : 'POST', 
		dataType : 'json', 
		success : function(rsp) 
		{
		});

	@RequestMapping(value = "doPost", method = RequestMethod.POST)
	@ResponseBody
	public void doPost(HttpServletRequest request){
		String name = request.getParameter("taskName");
		System.out.println(name);
	}




     从上面的示例可以看到:发送get请求时,参数taskName的值是“任务1”,但是java代码中获取的值确实乱码,而发送post请求时,则不存在乱码的问题,为什么会出现这种情况呢?

      因为: 

      (1) 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,如/test/demo.jsp?name1=value1&name2=value2,而在url中的字符只能是ASCII码,对于非ASCII码的字符,将无法表示,所以就会出现乱码。

      (2)  使用POST方法时,查询字符串在POST请求的Header中存在,和HTTP请求一起发送到服务器,没有只能是ASCII码的限制。

了解了HTTP GET请求和POST请求的区别之后,如何解决GET请求是的乱码问题呢?

       方法一、客户端不做处理,服务端转码                 

               String content = new String(request.getParameter("xxxx").getBytes("ISO-8859-1"), "UTF-8");

       方法二、客户端进行encodeURI转码,服务端解码

          js:

	 var param = {};
     var name = "任务1";
     param["name"] = encodeURI(name);
     $.ajax({ 
    	 url : remoteURL, 
    	 data : param,
    	 cache : false, 
    	 async : false, 
    	 type : 'GET', 
    	 dataType : 'json', 
    	 success : function(rsp) 
    	 {
    		 
    	 });

          java:

    public boolean doGET(HttpServletRequest request){
    	String name = request.getParameter("name");
    	System.out.println(name);
    	name = URLDecoder.decode(name, "UTF-8");
    	System.out.println(name);
    }
         打印结果为:

    %E4%BB%BB%E5%8A%A11
    任务1

     方法三、客户端进行encodeURIComponent转码,服务端解码
          js:

	 var param = {};
     var name = "任务1";
     param["name"] = encodeURIComponent(name);
     $.ajax({ 
    	 url : remoteURL, 
    	 data : param,
    	 cache : false, 
    	 async : false, 
    	 type : 'GET', 
    	 dataType : 'json', 
    	 success : function(rsp) 
    	 {
    		 
    	 });
          java:
    public boolean doGET(HttpServletRequest request){
    	String name = request.getParameter("name");
    	System.out.println(name);
    	name = URLDecoder.decode(name, "UTF-8");
    	System.out.println(name);
    }


  

   

                 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值