• 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

  • 相关阅读:
    python系列十二:python3模块
    python系列十一:python3数据结构
    python系列十:python3函数
    python系列九:python3迭代器和生成器
    python系列八:Python3条件控制&循环语句
    python系列七:Python3字典dict
    python系列六:Python3元组tuple
    Linux Ubuntu 安装SSH服务
    Linux Ubuntu 查看IP
    Linux 基础命令
  • 原文地址:https://www.cnblogs.com/cmblogs/p/3737340.html
Copyright © 2020-2023  润新知