文档章节

jQuery ajax请求编码分析

Bean401
 Bean401
发布于 2015/03/24 11:39
字数 749
阅读 29
收藏 0
  • get请求

    请求编码:

    请求参数放在不同的位置,提交请求的编码不同,如果放在url参数中,如下:

    url: '<s:url value="/liposs/resource/wlan/switchAPDevice!ajaxTest.action?fresh="/>' + Math.random() + "&text=" + str,:

    则使用浏览器编码,不同浏览器版本的编码方式不同,具体提交的编码格式是什么,可以使用抓包工具查看;

    经测试-IE使用操作系统编码,chrome使用页面指定编码。

    请求参数放在data参数中,如下:

    data: {"name":str}

    则jQuery默认编码为UTF-8,代码片段如下:

    s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );

    服务器解码(tomcat):

    对于get请求来说,服务器的解码方式与配置文件server.xml中的Connector节点有直接关系,其中的两个参数:

    URIEncoding:指定URI参数的编码方式。

    useBodyEncodingForURI:true-使用request.getCharacterEncoding()值为URI编码方式,false-直接使用URIEncoding的值。

    总结:get请求的参数放在data参数中,这样客户端会使用统一的UTF-8编码(jquery实现),如果服务器没有特殊指定编码过滤器,在struts的核心filter中有如下代码:

    // check for Ajax request to use UTF-8 encoding strictly http://www.w3.org/TR/XMLHttpRequest/#the-send-method

        if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {

            encoding = "UTF-8";

         }

        注意:如果使用自己实现的过滤器,也要加入上面的代码,否则解码可能出现异常。

        然后在server.xml中将useBodyEncodingForURI参数设置为true即可。

        异常:按照上面讲的配置,请求参数还是放在了url中,这时可能出现乱码(某些执拗的人),所以请求参数一定要写在data中。下面会说明这种异常如何解决(最好不要这样使用)。        

  • post请求

    请求编码和上面的get请求一样;

    服务器解码(tomat):

    使用request中第一次设置CharacterEncoding解码。

  • 异常处理

        如果大家按照上面描述的配置来使用ajax请求就不会出现乱码问题,但是也可能出现某个能人乱搞,这时的终极办法就是页面两次编码,应用解码一次。

        代码如下:

        encodeURIComponent(encodeURIComponent(str));//使用两次UTF-8编码str中的非字母、数字以及ASCII标点符号: - _ . ! ~ * ' ( ),并且在每个字节前添加%

encodeURIComponent("王")  //"%E7%8E%8B"
encodeURIComponent(encodeURIComponent("王")) //"%25E7%258E%258B"

        应用中使用如下方法:

URLDecoder.decode(text, "utf-8"))

        为什么要这样写,并且可以正确解析呢?

        首先大家应该了解,我们使用request.getParameter(name)获取请求中的参数时,tomcat会帮我们解码一次,鉴于此,无论服务器使用何种编码方式来解码二次编码的字符串("%25E7%258E%258B"),

        "%25"都会编码为“%”,第一次解码后的字符串就是我们第一次编码后的字符串("%E7%8E%8B"),再使用指定的UTF-8解码,参数就可以正确解析出来了。


© 著作权归作者所有

Bean401
粉丝 1
博文 1
码字总数 749
作品 0
南京
高级程序员
私信 提问
jQuery零基础入门——(八)AJAX

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 用JavaScript写AJAX前面已经介绍...

JandenMa
2018/08/06
28
0
Jquery中AJAX参数详细介绍

在使用jquery的时候,我们经常用到jquery中对ajax的封装,下面对ajax函数的各参数详细说明和讲解,以便更好的理解和使用 $.get(url, data, callback,type) 和 $.post(url, data, callback, ...

凯文加内特
2015/01/28
386
0
jQuery ajax - serialize()方法以及常见问题

使用ajax时,常常需要拼装input数据为'name=abc&sex=1'这种形式,用JQuery的serialize方法可以轻松的完成这个工作! jQuery ajax - serialize() 方法定义和用法 serialize() 方法通过序列化表...

freedonn
2014/05/10
882
0
Ajax原生GET和POST请求及Jquery Ajax的GET和POST请求

版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/jay100500/article/details/86586160 Ajax原生GET请求接口: Ajax原生POST请求: 接下来看Jquery封装的Ajax的GET请求...

范特西_jay
01/21
0
0
Struts2 整合jQuery实现Ajax功能

Struts2 整合jQuery实现Ajax功能 技术领域很多东西流行,自然有流行的道理,这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美。 首先明确个概念: jQuery是什么:是...

孙斐
2011/10/12
9.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

浅谈java过滤器Filter

一、简介 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml...

青衣霓裳
16分钟前
3
0
技术产品研发型企业的发展困境

目前中小企业想要发展自己的业务,必须使用到底层架构技术,于是企业多采用三种技术方案,一、招相关技术人员,并为之长期投入技术成本;二、使用相关开源技术框架,并培养相关业务人员;三、...

数蚕
39分钟前
3
0
《2019网络安全行业人才发展研究报告》出炉

随着大安全时代的到来,网络安全已经从虚拟空间延伸到现实空间。当今网络战愈演愈烈,网络军备赛即将来临。网络空间领域的战争归根到底还是人才的竞争。面对新形势,建立高效的网络安全人才培...

360网络安全大学
41分钟前
1
0
酒德利商城开发程序逻辑

<textarea name="Content" rows="2" cols="20" id="Content" class="t14" style="font-family:宋体;font-size:10.5pt;"></textarea> 酒德利商城开发zhao·I5OI3I5I74O微/电,酒德利批发零售,......

洋哥说
51分钟前
2
0
十款强大的IDEA插件-Java开发者的利器

xl_echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!! 插件一...

xlecho
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部