关于jquery调用方法.getJSON提交数据乱马的问题
时间:2009-11-01
来源:互联网
我用的是struts1.2,扩展了ActionServlet 扩展中写了
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
并且
还给加了一个过滤器
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
common.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
jsp页面
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
数据库的编码是utf-8的
现在提交数据到后台还是乱马,不知道大家是怎么做得???谢谢!!
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
并且
还给加了一个过滤器
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
common.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
jsp页面
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
数据库的编码是utf-8的
现在提交数据到后台还是乱马,不知道大家是怎么做得???谢谢!!
作者: joliny 发布时间: 2009-11-01
已解决:
前台:
encodeURI($("#musicComment").attr("value"))
后台:
URLDecoder.decode(pl001Form.getMusicComment()))
因为jquery默认的getJSON方法用的是GET提交,用post就没有问题了,但是
返回的不是Json对象了,需要var dataObj=eval("("+data+")");//转换为json对象 很不方变,所以还是想用getJSON方法。因为提交的数据量很小所以用这个方法还是比较方便的!!
不过总感觉不方便,不知道还有没有更好的解决方案
前台:
encodeURI($("#musicComment").attr("value"))
后台:
URLDecoder.decode(pl001Form.getMusicComment()))
因为jquery默认的getJSON方法用的是GET提交,用post就没有问题了,但是
返回的不是Json对象了,需要var dataObj=eval("("+data+")");//转换为json对象 很不方变,所以还是想用getJSON方法。因为提交的数据量很小所以用这个方法还是比较方便的!!
不过总感觉不方便,不知道还有没有更好的解决方案
作者: joliny 发布时间: 2009-11-01
jQuery的post函数会以页面的charset对参数进行编码(格式是二进制字符串,如'\x01'),所以只要页面的编码正确就不会出错,这也是你用post无错的原因。
get方式实际上是在url上附加“参数=参数值”,而这部分如果不是URL的正规字符,浏览器就会自动以页面编码对其进行编码处理(如'%01')。
如果服务器端你没有相应解码,或页面编码错误的话,就会乱码。
确定后者很简单,用Firefox firebug检查一下header中有没有这种字段:Content-Type text/html; charset=UTF-8
所以如果出于效率考虑,我的建议是用post。
而如果要用get的话,建议用encodeURIComponent、decodeURIComponent,某些字符encodeURI、decodeURI不会处理。
encodeURIComponent很重要的一个作用就是把参数编码成UTF-8,但JavaScript的速度显然没有浏览器自动编码快(后者一般是C/C++实现)。
最后,一般都是用ajax函数,然后设置dataType为json或jsonp。如果是jsonp,服务器端需要加上括号。这2种方式都不需要eval。
get方式实际上是在url上附加“参数=参数值”,而这部分如果不是URL的正规字符,浏览器就会自动以页面编码对其进行编码处理(如'%01')。
如果服务器端你没有相应解码,或页面编码错误的话,就会乱码。
确定后者很简单,用Firefox firebug检查一下header中有没有这种字段:Content-Type text/html; charset=UTF-8
所以如果出于效率考虑,我的建议是用post。
而如果要用get的话,建议用encodeURIComponent、decodeURIComponent,某些字符encodeURI、decodeURI不会处理。
encodeURIComponent很重要的一个作用就是把参数编码成UTF-8,但JavaScript的速度显然没有浏览器自动编码快(后者一般是C/C++实现)。
最后,一般都是用ajax函数,然后设置dataType为json或jsonp。如果是jsonp,服务器端需要加上括号。这2种方式都不需要eval。
作者: keakon 发布时间: 2009-11-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28