$.ajax({

  dataType : ‘json',type : ‘POST',url : ‘http://localhost/test/test.do',data : {id: 1, type: ‘商品'},success : function(data){ } } );


问题:

提交后后台action程序时,取到的type是乱码

解决方法:

方法一:提交前採用encodeURI两次编码,记住一定是两次

1.改动下面代码



data:{id:1, type:encodeURI(encodeURI(‘商品'))}

2.在后台action里要对取得的字符串进行decode

1、String type = request.getParameter(“type”);

2、type = URLDecoder.decode(type, “UTF-8″);

方法二:ajax配置contentType属性,加上charset=UTF-8

在ajax方法中增加下面參数

contentType: “application/x-www-form-urlencoded; charset=UTF-8″使用其他js框架或者xhr都是差点儿相同,设置header中contentType就可以,


这里关键是charset=UTF-8,假设没有这个,是不行的,默认jQuery里的contentType是没有的



一、測试环境

jQuery:1.3.2

tomcat:5.5.17

二、測试方法

1.使用get方式

server端java代码:



String name = new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8");

clientjs代码:



$.ajax({url: "2.jsp",type: "get",data: {name:"中文"},success: function(response){


alert(response);

}});

结果:正确显示



$.ajax({url: "2.jsp",type: "get",data: "name=中文",success: function(response){


alert(response);

}});

结果:乱码



$.get("2.jsp", { name: "中文" },function(response){


alert(response);

});

结果:正确显示

复制代码 代码例如以下:


$.get("2.jsp", "name=中文",function(response){


alert(response);

});

结果:乱码



2.post方式

server端java代码:



request.setCharacterEncoding("UTF-8");


String name = request.getParameter("name");

clientjs代码:



$.ajax({url: "3.jsp",type: "post",data: "method=testAjaxPost&name=中文",success: function(response){


alert(response);

}});

结果:正确显示

$.ajax({url: "3.jsp",type: "post",data: {name:"中文"},success: function(response){

alert(response);

}});



结果:正确显示



$.post("3.jsp", { name: "中文" },function(response){


alert(response);

});

结果:正确显示



$.post("3.jsp", "name=中文",function(response){


alert(response);

});

结果:正确显示

三、使用filter



public void doFilter(ServletRequest request, ServletResponse response,


FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

if (req.getHeader("X-Requested-With") != null && req.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) {


request.setCharacterEncoding("utf-8");

} else {

request.setCharacterEncoding("gbk");

}

chain.doFilter(request, response);

}

jQuery在使用ajax的时候会在header中增加X-Requested-With,值为:XMLHttpRequest,filter中推断是jQuery的ajax请求时就把字符编码设为utf8,这样能够解决post提交中的中文乱码问题,不须要在代码中设置request.setCharacterEncoding("UTF-8");


对于get方式的中文乱码问题。建议不使用get方式提交中文。统统改为post ^-^



为了和prototype.js处理中文的方式一致,能够使用例如以下的方式,自己定义header中的属性RequestType



$.ajax({

url: "3.jsp",

type: "post",

data: {name:"中文"},

beforeSend: function(XMLHttpRequest){

XMLHttpRequest.setRequestHeader("RequestType", "ajax");

alert("開始");

},

success: function(data, textStatus){

alert(data);

},

error: function(XMLHttpRequest, textStatus, errorThrown){

alert("错误:" + textStatus);

},

complete: function(XMLHttpRequest, textStatus){

alert("完毕:" + textStatus);

}

});

filter代码例如以下:



public void doFilter(ServletRequest request, ServletResponse response,


FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

if (req.getHeader("RequestType") != null && req.getHeader("RequestType").equalsIgnoreCase("ajax"))) {


request.setCharacterEncoding("utf-8");

} else {

request.setCharacterEncoding("gbk");

}

chain.doFilter(request, response);

}

版权声明:本文博主原创文章,博客,未经同意不得转载。

jquery之ajax中国乱码的解决方案的更多相关文章

  1. JQuery在Ajax的Post提交中国乱码的解决方案

    介绍: 在JQuery的Ajax POST要求,一个要求.中国的背景之中,乱码,如何解决呢? 问题简介: var regid = $('#oregion').combobox('getValue'); ...

  2. burp suite中国乱码的解决方案

    于http的response还有经常出现乱码,其实解决的办法很easy 首先点击Options标签, 然后找到display 找到http message display watermark/2/te ...

  3. JQuery中Ajax的Post提交中文乱码的解决方案

    出自:http://m.blog.csdn.net/blog/blueheart20/26370023 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何 ...

  4. 在jQuery中Ajax的Post提交中文乱码的解决方案

    引言: 在jQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: var regid = $('#oregion').combobox('getV ...

  5. jquery的ajax()函数中文传值出现乱码完美解决方案

    1.        jquery的ajax()函数 $.ajax({ type: "POST", dataType: "text", url: ".. ...

  6. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

  7. [转载]JQuery的Ajax跨域请求的解决方案

    今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发现JQuer ...

  8. JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    原文地址:http://www.bitscn.com/pdb/ajax/316671.html 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? ...

  9. jQuery AJAX中文乱码处理

    最近工作中用jQuery ajax返回出现乱码,用的Notepad++编辑器,当JS部分传递中文时,另一页面接收的话会出现乱码,在网上找了很多方法,基本上没有很好的解决. 页面用GB2312编码,JS ...

随机推荐

  1. 泥鳅般的const(一个小Demo彻底搞清楚)

    #include<stdio.h> int main(){     int a = 3;     int b = 5;          /* C标准库函数中最常见格式, 目的是保护參数, ...

  2. SSM框架整合( Spring 、 SpringMVC 和 Mybatis )

    1.基本概念 1.1.Spring Spring 是一个开源框架, Spring 是于 2003  年兴起的一个轻量级的 Java  开发框架,由 Rod Johnson  在其著作 Expert O ...

  3. WPF界面设计技巧(9)—使用UI自动化布局

    原文:WPF界面设计技巧(9)-使用UI自动化布局 最近一直没时间更新这系列文章,因为我一直在埋头编写我的第一个WPF应用程序:MailMail 今天开始编写附属的加密/解密工具,对UI自动化布局有些 ...

  4. surfaceflinger中各个layer的排序

    surfaceflinger的主要工作就是负责把上层传递下来的各个不同的layer进行composition. 这里,我们来讨论一下各个layer在surfaceflinger中的上下排序关系和相关的 ...

  5. 原声JS瀑布流加延迟载入

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 《Javascript高级程序设计》读书笔记之bind函数详解

    为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc ...

  7. linux查看CPU和内存信息

    一 先来看看ps命令: 1.查看当前某个时间点的进程:ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死. 哪些进程占用了 ...

  8. JAVA 数据权限设计

    数据权限设计 前言 在各种系统中.要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门可以方便并且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.尽管企业中各个单元的工作 ...

  9. 添加xml文件编辑语法提示

    找到Struts的lib目录 找到struts2-core-文件并解压开 这个struts.dtd文件才是我们需要添加的文件 双击XML Catalog 点击ADD Key中复制粘贴D:\web\st ...

  10. VMware vSphere 服务器虚拟化之十七 桌面虚拟化之安装View链接服务器

    VMware vSphere 服务器虚拟化之十七 桌面虚拟化之安装View链接服务器 View链接服务器(View Connection Server)是Vmware Horizon View桌面虚拟 ...