JQuery的Ajax中Post方法传递中文出现乱码的解决方法

 更新时间:2014年10月21日 14:20:47   投稿:shichen2014  
这篇文章主要介绍了JQuery的Ajax中Post方法传递中文出现乱码的解决方法,较为深入的分析了Ajax的post方法出现乱码的原因,以及具体的解决方法,需要的朋友可以参考下

本文实例讲述了JQuery中Post传递中文出现的解决方法,即乱码ajax与jquery.ajax中文参数post传递乱码处理方法。分享给大家供大家参考。具体分析如下:

问题一:

今天在做项目时,需要用到Ajax,之前我在用GET方式传递中文参数时,只需要在后台程序中设置页面编码为GB2312即中文能正常显示,可是这次由于表单项目较多,不适合用GET方式传递,只能用POST方式,但发现后台程序中设置编码为GB2312时中文还是显示的乱码。经过一番研究问题才最终得到解决。

解决方法:

解决此问题的方法非常简单,只需要在JS处理参数时用escape()函数处理一下即可,而且不需要再用unescape()解码,这个方法适合POST和GET方式,具体的Ajax代码这里我不例出,这里给出用escape()函数处理参数时的代码:

复制代码 代码如下:
var htmer ="getcode="+escape(getcode)+"&Content="+escape(Content);
 

通常我们在处理Ajax的时候会在这里直接获取参数的值,为了使中文参数不是乱码,我们只需要用escape()函数对参数处理下即可。

问题二:

当网站页面不是utf-8编码时,ajax提交的中文便会变成乱码。

解决方法如下:

找到jquery.js里的contentType:application/x-www-form-urlencoded,将它改成contentType:application/x-www-form-urlencoded; charset=UTF-8就可以了。

原因:未指定charset时,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。jquery的ajax根本没有考虑到国际化的问题,而使用了欧洲的字符集,所以传递中文时才会出现乱码

我很久以前一直在使用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/网页特效" 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><a 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>

此外,由于Ajax的默认汉字编码是utf-8,因此比较保险的方法是保证所涉及的页面统一编码格式为utf-8。

希望本文所述对大家基于的jQuery的Ajax程序设计有所帮助。

相关文章

  • jQuery验证插件validate使用详解

    jQuery验证插件validate使用详解

    这篇文章主要为大家详细介绍了jQuery验证插件validate的使用方法,jQuery.validate.js插件用于对表单输入进行验证,对验证插件感兴趣的小伙伴们可以参考一下
    2016-05-05
  • jQuery实现的多滑动门,多选项卡效果代码

    jQuery实现的多滑动门,多选项卡效果代码

    这篇文章主要介绍了jQuery实现的多滑动门,多选项卡效果代码,具有tab切换与滑动门的功能,涉及鼠标事件的响应与页面元素属性动态变换操作相关实现技巧,需要的朋友可以参考下
    2016-03-03
  • jquery validate poshytip 自定义样式

    jquery validate poshytip 自定义样式

    项目中做了一个jquery.validate气泡提示在新版的jquery.validate中,有这个功能,但在我这里不怎么好用,所以自己加了一个,找了一些插件qtip2的样式不错,需要的朋友可以参考下
    2012-11-11
  • 使用jQuery实现鼠标点击左右按钮滑动切换

    使用jQuery实现鼠标点击左右按钮滑动切换

    在做web前端开发的时候经常遇到图片滑动切换特效,接下来通过本文给大家分享使用jQuery实现鼠标点击左右按钮滑动切换特效,感兴趣的朋友参考实现代码
    2017-08-08
  • JQuery 无废话系列教程(一) jquery入门 [推荐]

    JQuery 无废话系列教程(一) jquery入门 [推荐]

    贝壳(就是本文作者了)也属于刚刚会用点JQuery的那一类型, 在学习过程中也遇到挺多问题,特别是在开始入门的时候.一直准备写些有关JQuery的文章,但又恐自己文笔及表达能力有限而"误人子弟",最终还是鼓起勇气. 如在文章中有错误或者不合适的理解望广大朋友直接指出批评.
    2009-06-06
  • 基于jquery实现等比缩放图片

    基于jquery实现等比缩放图片

    这篇文章主要给大家分享了一段基于jquery实现等比缩放图片的代码,非常的实用,这里推荐给大家
    2014-12-12
  • 利用jquery包将字符串生成二维码图片

    利用jquery包将字符串生成二维码图片

    将一个字符串生成二维码图片,如果想要带log的二维码,可以在生成后的二维码中间部位自己添加一个小log,具体实现如下,感兴趣的朋友可以参考下
    2013-09-09
  • easyui Droppable组件实现放置特效

    easyui Droppable组件实现放置特效

    droppable和draggable有类似的地方,不过区别点在于前者着重于将元素放进某个容器中,而后者则着重于可拖拽(虽然可能一些效果两者都可以实现)。而且通过查看easyloader源码可知道,droppable并不依赖于draggable。
    2015-08-08
  • 基于Jquery的实现回车键Enter切换焦点

    基于Jquery的实现回车键Enter切换焦点

    系统默认情况下,使用Tab按键切换页面元素的焦点,有没有想过回车键Enter也可以实现这种功能,并且具有良好的用户体验。
    2010-09-09
  • 修复jQuery tablesorter无法正确排序的bug(加千分位数字后)

    修复jQuery tablesorter无法正确排序的bug(加千分位数字后)

    这篇文章主要介绍了如何修复jQuery tablesorter无法正确排序的bug(加千分位数字后)的相关资料,需要的朋友可以参考下
    2016-03-03

最新评论