jquery+asp ajax 中文乱码问题

做网站的时候,因为网站最初设计的时候,没有考虑那么多, 设定了gb2312 的简体中文 作为网站编码。

作为中文用gb2312的编码属很正常的事件了,建站起来也没有什么大问题,包括自己编写JS Ajax也不会产生乱码问题

随着Jquery的流行,我也渐渐喜欢Jquery操作DOM的方法,后来把Jquery文件作为全站的公用JS库。

  Jquery的Ajax也挺好用,因为作为公用的文件了,所以不必再为每个需要Ajax的页面,再写什么XMLHTTPrequest这些对象,所以就开始使用Jquery的Ajax.

  使用中发现了一些问题:

    第一个问题就是load,和Get方法容易缓存,就是每次输出的内容都是一样的,

      这个挺好解决的,直接在请求网址后面,加上一个随机数,致使网址不一样,就不会被缓存了。

    第二个问题就是乱码问题了,这个问题纠结了我挺时间。经过摸索了一阵,现想出两种方法解决,记录一下,以免忘记了

      第一种方法:

        把请求的页面,编码存为utf-8文件,同时<%@LANGUAGE="VBSCRIPT"
CODEPAGE="65001"%>服务器编码设为65001代表utf-8,最后还要在页面上输出编码也设为 utf-8,即
response.Charset="utf-8" ,这样的一至编码,即可解决乱码问题





1

2

3

4

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

<%

    response.Charset="utf-8"

%>

        注意,页面保存的时候一定要存为utf-8文件,不然,整个页面都会乱码!

      

      第二种方法:

        第二种方法,是修改jquery文件!

        我使用的是1.3.2版本的,就以这个为例!

        Jquery处理ajax的最主要的一个方法就是:ajax: function( s ) {}

        无论是$.load,$.get,$.post
最终都是在这个方法里面处理的,不管其它的,直接去找,为什么Jquery把我们的传递的参数都变成了utf-8编码的数据了,

          jquery的 ajax传递的data参数,最后会传递给param: function( a ) {}这个方法,处理,

            jquery param是这样写的:

        





1

param: function( a ) {   var s = [ ];   





1

function add( key, value ){<br>     s[ s.length ] = encodeURIComponent(key) + ‘=‘ + encodeURIComponent(value);





1

  };  





1

// If an array was passed in, assume that it is an array





1

2

3

4

5

6

7

 // of form elements

 if ( jQuery.isArray(a) || a.jquery )

 // Serialize the form elements

 jQuery.each( a, function(){

   add( this.name, this.value );

   });

........后面的不粘了。

        

      可以看到   s[ s.length ] = encodeURIComponent(key) + ‘=‘ +
encodeURIComponent(value); 这句代码。

      这就是乱码的原因,因为encodeURIComponent这个方法,就是把字符,按照utf-8的编码,把字符进行 URI
组件编码(大家不明白的,可以百度一下)

      咱们把这改良一下,让他也可以按gb2312的进行URI编码





1

2

3

4

5

6

7

8

var CharsetUtf=true;

try{if(a.ParamCharset||a.ParamCharset=="gb2312"){CharsetUtf=false;}}catch(e){};

function add( key, value ){

  if(CharsetUtf)

    {s[ s.length ] = encodeURIComponent(key) + ‘=‘ + encodeURIComponent(value);}

    else

    {s[ s.length ] = escape(key) + ‘=‘ + escape(value);}

};

      这是我简单的修改了一下,原理是定义一个变量,来确定他是按哪种字符编码来进行URI编码

      如果是true,就按utf-8如果为fales,则按gb2312;

      默认为true,按utf-8处理!

      好下面进行判断!

      try{if(a.ParamCharset||a.ParamCharset=="gb2312"){CharsetUtf=false;}}catch(e){};

      这句代码的意思是,检测传递进来的数据 a
,是否有ParamCharset这个属性,如果有,再判断他是否等于"gb2312",如果是,再把CharsetUtf改为false;

      如果没有,则不处理。

      try catch这个是防止,即使数据错误也会按utf-8处理。防止万一的。

      

好了,写了这么多,现在调用一下试试:

  





1

$.post("/zhanHui/ajaxAsp/SearchPageZuiXin.asp"





1

,{sPageSize:pPageSize,page:pPage,ajaxContent:pAjaxContent,ParamCharset:"gb2312"}





1

,function(data){






1





1

},"json");

      按上面代码,只要我们在调用的时候,data参数里面加上一个ParamCharset:"gb2312"

这个参数,传递进去的就是gb2312 的数据了,没用传递这个参数,即传递进去一个utf-8的数据了。

第三种方法是 客户端 js  escape 编码,服务器端 url 解码

http://www.cnblogs.com/choshe/articles/1809114.html

jquery+asp ajax 中文乱码问题,布布扣,bubuko.com

时间: 2024-08-01 06:31:08

jquery+asp ajax 中文乱码问题的相关文章

jquery之ajax中文乱码解决方案

$.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(encodeUR

mui.ajax中文乱码

估计这是个bug: 1 //mui 的 ajax 中文乱码 2 var url = 'http://api.juheapi.com/japi/toh?key=1f26c107d8864bdfb98202bc314ce0d5&month=11&day=25&v=2.0' 3 mui.ajax(url,{ 4 dataType:'json', 5 type:'post', 6 timeout:5000, 7 success:function(data){ 8 console.log(d

ajax中文乱码问题的总结

ajax中文乱码问题的总结 2010-12-11 22:00 5268人阅读 评论(1) 收藏 举报 ajaxurljavascriptservletcallback服务器 本章解决在AJAX中常见的中文问题,分析中文乱码产生的原因,以及如何解决乱码问题 1. HTTP协议的编码规定 在HTTP协议中,浏览器不能向服务器直接传递某些特殊字符,必须是这些字符进行URL编码后再进行传送.url编码遵循的规则: 将空格转换为(+) 对0-9,a-z,A-Z之间的字符保持不变. 对于所有其他的字符,用这

Ajax中文乱码的解决

网上有很多解决Ajax中文乱码的例子,昨晚弄了很久,最终确定一种"确实"有效地方法.首先我有必要说明一下我遇到的情况:有一个注册页面,注册用户填完信息并提交后,页面获得信息并通过java servlet存放到mssqlserver中.但若填写的信息中含有中文,则报错.这就是我遇到的情况. 网上似乎有很多种解决方法,不过我现在只确定了一种: 你要要将含有中文的数据进行两次encodeURI编码,在服务器端用java.net.URLDecodeer.decode(String s,&quo

ajax 中文乱码

ajax 中文乱码  Firefox 正常,IE 有问题是 解决办法 data:{"name":name,"number":number,"cardNumber":cardNumber,"t":new Date().getTime()}, 采用这种方式传参. contentType: "application/x-www-form-urlencoded; charset=utf-8", ajax 中文乱码

jquery serialize传中文乱码解决方法

jQuery form表单.serialize()序列化后中文乱码问题原因及解决 原因:.serialize()自动调用了encodeURIComponent方法将数据编码了 解决方法:调用decodeURIComponent(XXX,true);将数据解码 例如: var params = jQuery("#formId").serialize(); // http request parameters. params = decodeURIComponent(params,true

jquery serialize序列化中文乱码问题

背景: 页面多条件查询简化多条件提交ajax url参数组织动作,jQuery提供了很便捷的$('#formId').serialize()方法.会自动组装为{a=1,b=2,c=3....} 问题: serialize方法会自动调用encodeURIComponent方法进行编码,所以,自动完成后的中文会产生经典的乱码问题. 解决: 使用decodeURIComponent对serialize加码后的进行解码即可恢复正常. 扩展资料:http://www.w3school.com.cn/jsr

spring mvc ajax中文乱码的几种解决办法

使用spingmvc,在JS里面通过ajax发送请求,并返回json格式的数据,从数据库拿出来是正确的中文格式,展示在页面上就是错误的 ,研究了一下,有几种解决办法. 方法一: 在@RequestMapping里面加入produces = "text/html;charset=UTF-8" Java代码 @RequestMapping(value = "/configrole", method = RequestMethod.GET, produces = &quo

ajax 中文乱码问题 主要是IE浏览器

解决方案: 提交前采用encodeURI两次编码,注:一定是两次 举例: var taText = $("#txtName").val(); taText = encodeURI(encodeURI(taText)); $.getJSON("/Index/valid?name=" + taText + "&imageList=" + imageList + "", function (data) {...}); 以下解