ext 表单提交或ajax请求返回的信息中文乱码,后台response和前台页面的编码都设置为uft-8了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ext 表单提交或ajax请求返回的信息中文乱码,后台response和前台页面的编码都设置为uft-8了相关的知识,希望对你有一定的参考价值。

提交到后台中的中文正常,返回的信息中有中文就乱码,我在前后台都设置了response.setCharacterEncoding("UTF-8");前台的jsp的编码也是utf-8,页面属性编码也是utf-8

我用拦截器解决了这个问题
web.xml里面的配置

<filter>
<filter-name>SubmitFilter</filter-name>
<filter-class>common.SubmitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SubmitFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
拦截器文件里面的代码:
package common;

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 SubmitFilter implements Filter

private FilterConfig filterConfig = null;
@Override
public void destroy()



@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
if(this.filterConfig == null)
return;

HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
// HttpSession session = request.getSession();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
filterChain.doFilter(servletRequest, servletResponse);


@Override
public void init(FilterConfig arg0) throws ServletException
this.filterConfig = arg0;




这样就解决了问题,我试过了,可以的。
参考技术A 表单提交到后台有乱码解决:
ajax提交的时候用‘data=’+encodeURIComponent('测试');后台request的时候用String data=new String(request.getParameter("data").getBytes("iso-8859-1"), "UTF-8");

你说返回到前台的信息中文乱码,我想请问你,你怎么接收来自后台的返回信息的呢?

EXT--表单AJax提交后台,返回前端数据格式的转换

前言:

前端发送请求至服务端(Java),得到的数据是Java语言对象所表现的形式,经常需要转换为JSON格式的字符串写出至前端;当前端获取后也往往需要将字符串转换为js的对象。本文描述了在EXT作为前端框架,表单异步提交的情景下这些数据格式处理。当然,此类的格式转换方法有多种,本文仅描述其中一种而已。

说明:EXT版本:3.4

 

示例:

服务端相关代码

                    //创建SubTreeVo集合
                    List<SubTreeVo> treeVos = new ArrayList<SubTreeVo>();
                    if( topleveldomianList != null && !topleveldomianList.isEmpty() ) {
                        Iterator<Ttopleveldomian> it = topleveldomianList.keySet().iterator();
                        while ( it.hasNext() ) {
                            Ttopleveldomian key = it.next();
                            SubTreeVo vo = new SubTreeVo();
                            vo.setId(key.getiDomainId());//域名id
                            vo.setName(key.getsDomainName());//域名
                            vo.setUrl(key.getsDomainUrl());//域名地址
                            vo.setUri(topleveldomianList.get(key));//域名uri
                            treeVos.add(vo);
                        }
                    }
                    try {
                        jsonStr = JSONUtil.serialize(treeVos);
                    } catch (JSONException e) {
                    }
                }//写出
                out.write("{success:true,info:‘上传成功‘,dataJson:‘"+jsonStr+"‘}");
//...

小结:JSONUtil为org.apache.struts2.json包下的一个类--需导struts2-json-plugin-2.3.15.1.jar,其serialize方法就是将Object转换为JSON字符串。

 

前端相关代码

                        importform.getForm().submit({
                            url : ‘/uploadFileWhiteName.do?action=channelDomainImport&channelId=‘+channelId,//调用的url资源
                            method : ‘POST‘,//获取请求URL的HTTP
                            waitTitle : ‘请稍后‘,//在调用一个action的处理过程中调用的Ext.MessageBoxwait显示的标题
                            waitMsg : ‘系统正在处理 ...‘,//在调用一个action的处理过程中调用的Ext.MessageBoxwait显示的内容
                            /**
                             * 当接收到一个有效的成功返回的数据包的时候调用的回调函数。
                             * @form Ext.form.BasicForm 做出请求动作的表单
                             * @action Ext.form.Action The Action class. 
                             */
                            success : function(form, action) {
                                //获取服务器返回的数据--JSON字符串
                                var str = action.response.responseText;
                                //将JSON字符串解析成对象
                                var msg = Ext.util.JSON.decode(str);
                                //将JSON字符串解析为对象  (注:用Ext.util.JSON.decode也可以)
                                var jsObject = eval(msg.dataJson);
//...

小结:将JSON字符串转换为js对象有两种方式:一是用EXT的工具包的JSON类,其decode方法可将JSON字符串转换为js对象;二是调用javascript的eval方法,可将JSON字符串转换为js对象。不过调用eval方法需注意的是:如果为单对象,则需写成eval("("+data+")");的形式,具体参见我的另一篇博客:js--eval函数

 

以上是关于ext 表单提交或ajax请求返回的信息中文乱码,后台response和前台页面的编码都设置为uft-8了的主要内容,如果未能解决你的问题,请参考以下文章

PHP $_POST提交中文乱码

springmvc,通过ajax方式提交页面数据,后台返回json数据中文信息乱码

ajax 请求servlet 响应 中文乱码

easyui表单提交问题

分针网—每日分享:ajax提交表单

织梦gbk版本中ajax提交自定义表单中文乱码问题解决方法