| Yun's profile无尽的探索PhotosBlogLists | Help |
|
June 19 jQuery form提交时中文乱码 [转]关键字: ajax post 中文 乱码 在使用jsp开始时,一不小心就会出现中文乱码的情况。通常可以使用如下方法解决:
jQuery.each( a, function(){
s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
});所以传给servlet的就是utf-8编码了,那么我们在过滤器中就必须使用utf-8进行转码。 对其中的过滤器做了下修正,在IE下和chrome下,request.getContentType()的值为"application/x-www-form-urlencoded",但是在firefox下,这个值为"application/x-www-form-urlencoded; charset=UTF-8",不是很明白ff为什么会是这个值。 filter代码如下:
package com.ajax.demo.action;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AjaxPostFilter implements Filter {
private static final String IE_CONTENT_TYPE = "application/x-www-form-urlencoded";
private static final String FF_AJAX_CONTENT_TYPE = "application/x-www-form-urlencoded; charset=UTF-8";
private static final String XMLHTTP_REQUEST = "XMLHttpRequest";
private static final String AJAX_CHARACTER_ENCODING_UTF8 = "UTF-8";
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestedWith = request.getHeader("x-requested-with");
String type = request.getContentType();
if (XMLHTTP_REQUEST.equals(requestedWith)&& (FF_AJAX_CONTENT_TYPE.equals(type)
||IE_CONTENT_TYPE.equals(type))) {
request.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);
response.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);
// request.getParameterMap();
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml配置,我用的是struts
<filter> <filter-name>ajaxEncodeFilter</filter-name> <filter-class>com.ajax.demo.action.AjaxPostFilter</filter-class> </filter> <filter-mapping> <filter-name>ajaxEncodeFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>ajaxEncodeFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> 这个filter应该在你的EncodeFilter之后,RoyMax说要在之前,我试了下是不行的。 经过这样设置之后,jsp使用gbk采用ajax提交就不会存在中文乱码了。 在使用chrome进行测试时,还发现chrome的一个奇怪问题,对于返回的结果,使用jquery.ajax处理
success:function showResponse(responseText, statusText) {
//这里name为input text id,如果"aa"在前,那么name的值会改为aa+返回的结果
$('#name').val("aa"+responseText);
//如果改成$('#name').val(responseText+"aa"),那么name的值仍然是//responseText,“aa”没有加到后面去,不知道是什么原因参考:http://jasin2008.javaeye.com/blog/312854 TrackbacksThe trackback URL for this entry is: http://fangyuncn.spaces.live.com/blog/cns!29C7193178944F5A!1738.trak Weblogs that reference this entry
|
|
|