李晓亮的博客

导航

[转]这才是真正的JQuery.ajax传递中文参数的解决方法

转自:http://dev.firnow.com/course/1_web/javascript/jsjs/20090303/157078.html

   许多人在使用JQuery.ajax方法时肯定会遇到一个问题。在编码不是UTF-8的时候,当传递的参数里有中文的时候,服务端Request的时候都会出现乱码。本人最近也遇到了需要传递中文参数的问题。在网上搜索一下,复制粘贴发的到处都是的“终极”“解决方案”无非就是escape(str)来转码,然后在服务端还要写个方法再编辑一次,或用System.Text.Encoding下的方法来换来换去。

    我很久以前一直在使用Prototype框架。在.net-GB2312或jsp-utf8下都使用过,从来没遇到有字符编码的问题。于是将Prototype和JQuery代码都下载下来打开研究原因。

    不同之处在于JQuery默认的contentType:application/x-www-form-urlencoded

    而Prototype则是contentType:application/x-www-form-urlencoded; charset=UTF-8

    这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1

    ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。

    JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题。

    而我们的UTF-8则可以解决这一问题。

    最终指需要修改JQuery的代码,显式声明contentType使用utf-8字符集,即可解决GB2312中文传递的问题。

    只需要简单的将JQuery的代码加以修改,加上charset=UTF-8就可以了,这样不需要改变改什么web.config或什么在页面中改编码什么的了,也不需要用escapc(str)再在服务端解码。英文怎么传递,中文也怎么传递。

    给段简单的代码测试一下:

 

test.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
 
<title></title> 
 
<script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script> 
 
<script type="text/javascript"> 
  
function DoAjax(){ 
   $.post(
"AjaxTest.aspx",{txt:$("#tbox1").val()}, 
    
function(data){ 
     $(
"#AjaxResponse").text(data); 
    } 
   ); 
  } 
 
</script> 
 
</head> 
 
<body> 
 
<p><href="javascript:DoAjax();">AjaxTest</a><input name="tbox1" id="tbox1" type="text" /></p> 
 
<div id="AjaxResponse"></div> 
 
</body> 
 
</html> 

 

 

AjaxTest.aspx:
 <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %> 
 
<script runat="server"> 
  
string parms; 
    
  
void Page_Load(object sender , EventArgs e) 
  { 
   parms
=Request["txt"]; 
   
if (String.IsNullOrEmpty(parms)){ 
    Response.Write(
"Is Null"); 
   }
else
    Response.Write(parms); 
   } 
  } 
 
</script>

posted on 2011-03-25 22:25  LeeXiaoLiang  阅读(231)  评论(0编辑  收藏  举报