jquery ajax返回html乱码解决

情景:

  index.html 使用如下代码访问另外一个html片段

1
2
3
4
5
6
7
8
9
10
11
12
13
function rewritedata(id){
    var uu = "/ciweekly/categorydataph/html/ciweeklyph_"+id+".html";
    $.ajax({
    url:uu,
    type:'POST',
    dataType:'text/html' ,
    error:function(){
    },
    success:function(dd){
        $("#ph_dd").html(dd);
    }
    });
}

注意:被访问的html为片段文件 ,里面只有一些数据代码 没有头部没有设置编码

使用ajax在发出请求后,xmlhttp组件在解析返回数据的编码时,是根据 http 响应的头部中是否有页面内容编码声明决定的.

如果返回的 http 头部中包含 charset 的内容编码声明,则按指定的编码读 responseBody,转换后存在 responseText中.
如果返回的 http 头部中没有包含 charset 的内容编码声明,则默认其编码为 utf-8,
所以,如果是gb2312的html页面,在用ajax请求后,读出来肯定是乱的.
原因是因为 html 页面服务端在输出的时候,是不包含 charset 内容编码声明的,所以ajax就会按utf-8
来解码,不乱才怪.

解决办法:在被访问的html片段页面头部放入如下声明:

1
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

 

你可能感兴趣的:(jQuery ajax)