+ -
当前位置:首页 → 问答吧 → 关于jquery调用方法.getJSON提交数据乱马的问题

关于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的
现在提交数据到后台还是乱马,不知道大家是怎么做得???谢谢!!

作者: joliny   发布时间: 2009-11-01

已解决:
前台:
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。

作者: keakon   发布时间: 2009-11-02

热门下载

更多