AJAX中关于responseText乱码问题

原创 2006年06月21日 17:20:00
用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会正确显示,而送出了GBK编码流的时候就乱了。解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。

PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");

checkname1.html
---------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>帐号检测</title>
</head>
<body>
  <script type="text/javascript" language="javascript">
    var http_request = false;
    function makeRequest(url) {
        http_request = false;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }
        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = alertContents;
   http_request.open('POST', url, true);
        http_request.send(null);
    }
    function alertContents() {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
   
      document.getElementById('aa').innerHTML=http_request.responseText;
     
      //hello=http_request.responseText;
     //document.getElementById('aa').innerHTML=http_request.responseText;
            } else {
              alert('There was a problem with the request.');
            }
        }
    }
 
 function userCheck() {
 var f = document.form1;
 var username = f.username.value;
 if(username=="") {
  window.alert("用户名不能为空。");
  f.username.focus();
  return false;
 }
 else {
  makeRequest('check_ok.asp?username='+username);
 }
}

</script>

<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <form name="form1">
  <tr>
    <td width="45%">
      <div align="right">用户名:
          <input name="username" type="text" id="username" onBlur="userCheck()">
      </div>
    </td>
    <td width="55%"><div id="aa" style="height:20px; width:200px; background-color: #BBBBFF ; color: #FFFFFF"></div>
</td>
  </tr>
  </form>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>

---------check_ok.asp
<% response.Charset="GB2312" '关键在这里%>
<%
u_name=request("username")'这里可以用数据库技术进行相关处理
if u_name="spell" then
response.Write(u_name&"已经被注册")
else
response.Write("恭喜,您选的帐号 "&u_name&" 可以注册!")
end if
%>

出处:http://www.ecspell.com/post/101.html

-------------------------

最近在用AJAX+PHP+MYSQL+APACHE写一个小小的留言本
算是对AJAX的综合应用迈出了一小步
在制作过程中有很多兴奋的体验 虽然和以前的制作方法比起来繁杂了一些
但是整个页面的结构和数据确实完全分开了 维护起来也更加容易
不过就在我成功搭建了ajax的运转平台以后(包括一些读取数据的js函数)发现读取出来的中文数据竟然都是乱码
一下子就把我的兴奋给浇灭了。。。
马上google了一下 发现原来ajax默认的是用utf-8的编码发送和接收数据的
而我的页面charset是gb2312的 因此出现乱码就不足为奇了
联想起以前在firefox下面读取cookie的时候出现了同样的问题
解决起来就很方便了 只要在js发送数据之前用escape函数把data转换为16进制的字符串保存在数据库里即可
同样 用js读取数据的时候再用unescape转换回来就ok了
这样感觉像在做计算机网络安全的作业。。。。
加密 解密。。。。
不过也好 确实安全性高了一些 至少数据库里面 人家看不到真实的中文资料哈哈哈

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于在AJAX中GET回的ResponseText中文乱码的最简解决办法

关于在AJAX中GET回的ResponseText中文乱码的最简解决办法 ...
  • xiaobaolove
  • xiaobaolove
  • 2006年04月10日 09:06
  • 8474

如何解决XmlHttp.responseText的乱码问题

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml">>    如何解决XmlH...
  • jxufewbt
  • jxufewbt
  • 2007年09月02日 15:53
  • 3752

ajax+php的responseText出现中文乱码

http://www.jb51.net/article/9164.htm http://blog.163.com/lgh_2002/blog/static/4401752620071118245882...
  • u010953266
  • u010953266
  • 2015年01月16日 10:46
  • 838

WinHttpRequest之get_ResponseText乱码问题

客户端向Web服务器Send()之后,就可以等待接收服务器Response的消息体,但是无论是下面的哪种方法接收到的消息体的中文字符都是乱码: 方法一: _bstr_t bStrText = pHtt...
  • u012372584
  • u012372584
  • 2017年05月10日 13:36
  • 558

关于ajax的responseText乱码的问题

关于ajax的responseText乱码的问题这个问题让我和纠结百度了好多都说是javascript...
  • wangdianyong
  • wangdianyong
  • 2014年05月26日 12:57
  • 1109

解决HttpServletResponse输出的中文乱码问题

首先,response返回有两种,一种是字节流outputstream,一种是字符流printwrite。 申明:这里为了方便起见,所有输出都统一用UTF-8编码。 先说字节流,要输出“中国"...
  • simon_1
  • simon_1
  • 2013年06月14日 11:51
  • 99795

【问题解决】HttpClient解析服务器返回的response出现乱码

问题场景最近在用httpClient做网络爬虫的时候,遇到了一个不大不小的问题,当使用HttpGet向指定网址发送请求后,接收到的Response无法正常解析,出现 口口??这样的乱码,编码也考虑到了...
  • u012465296
  • u012465296
  • 2016年11月04日 21:02
  • 3601

AJAX中关于responseText乱码问题

用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形...
  • cxzhq2002
  • cxzhq2002
  • 2006年06月21日 17:20
  • 5483

解决Response中文乱码

//在Servlet中是通过Service方法的参数传递每次请求 的request对象和response对象  //request  HttpServletRequest封闭了所有的请求信息  /...
  • asdfqwer1314
  • asdfqwer1314
  • 2011年10月30日 19:10
  • 6729

Ajax中responseText解析json格式数据

解决ajax处理服务器端返回结果responseText中是JSON的数据。 第一,json格式的文件内容如下: { "city":"ShangHai", "telephone":"12345...
  • Sober_123
  • Sober_123
  • 2016年05月05日 13:22
  • 7425
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AJAX中关于responseText乱码问题
举报原因:
原因补充:

(最多只允许输入30个字)