ajax乱码解决方法

2016-02-19 14:10 9 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐ajax乱码解决方法,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - Web开发 】

用过AJAX的朋友肯定知道javascript是使用UTF-8国际编码,即每个汉字用4个字节来存储,但是这就造成了用AJAX来send数据的时候出现乱码。
  
  有一种解决办法就是使用encodeURIComponent加上修改Content-Type为application/x-www-form-urlencoded"来把数据统一编码成url格式,当然,也可以指定编码,如:“application/x-www-form-urlencoded;charset=utf-8”,例子:http_request=newActiveXObject("Msxml2.XMLHTTP");http_request.setrequestheader("content-type","application/x-www-form-urlencoded;charset=utf-8");
  
  另一种方法就是通过vbscript的写的函数把数据转成gb2312格式的,我个人觉得这种方法比较好。有兴趣的朋友可以到网上去查一下。
  
  也可以在js发送数据之前用escape函数把data转换为16进制的字符串,用js读取数据的时候再用unescape转换回来就ok了。
  
  今天突发奇想,AJAX调用的时候会不会发送cookie呢?马上写了一个程序测试一下,果然能,这样就可以在调用ajax之前,先把数据通过javascript写到cookie里,然后再send就可以将cookie里的数据发送出去了,太爽了!!
  
  演示地址:http://cn5.cn/ajax/ajax12.htm
  
  客户端代码ajax.htm
  
  titleAJAX使用cookie传值例子/title
  
  script
  
  varoDiv
  
  varxh
  
  functiongetXML()
  
  {
  
  setcookie($('name').value,$('val').value);
  
  oDiv=document.all.m
  
  oDiv.innerHTML="正在装载,请稍侯......."
  
  oDiv.style.display=""
  
  xh=newActiveXObject("Microsoft.XMLHTTP")
  
  xh.onreadystatechange=getReady
  
  xh.open("POST","a.php",false)
  
  xh.send();
  
  }
  
  functiongetReady()
  
  {
  
  if(xh.readyState==4)
  
  {
  
  if(xh.status==200)
  
  {
  
  oDiv.innerHTML="完成"
  
  }
  
  else
  
  {
  
  oDiv.innerHTML="抱歉,装载数据失败。原因:"+xh.statusText
  
  }
  
  }
  
  }//author:longbillwww.longbill.cn
  
  functionsetcookie(name,value)
  
  {
  
  varcookiestr=name+"="+value+";";
  
  varexpires="";
  
  varcookieexp=60*60*1000;
  
  vard=newDate();
  
  d.setTime(d.getTime()+cookieexp);
  
  expires="expires="+d.toGMTString()+";";
  
  document.cookie=cookiestr+expires;
  
  }
  
  function$(a)
  
  {
  
  returndocument.getElementById(a);
  
  }
  
  /script
  
  body
  
  AJAX使用cookie传值例子:br/
  
  formname=myform
  
  name:inputid=namevalue="变量名甚至可以是中文"size=20br/
  
  value:inputtype=textsize=20id=valvalue=这里br/
  
  inputonclick="getXML()"type="button"value="送出数据"
  
  inputonclick="if(xh&&xh.responseText){alert(xh.responseText);}"type="button"value="显示返回结果"br/
  
  divid=mbgcolor=blue在此显示状态/div
  
  inputtype=buttononclick="alert(document.cookie)"value=显示本地COOKIE
  
  /form
  
  服务器端代码a.php
  
  ?
  
  header("Content-type:text/html;charset=GB2312");
  
  echo"以下是您送出的所有COOKIE变量及其值";
  
  print_r($_COOKIE);
  
  ?
  
  第一,javascript沿用java的字符处理方式,内部是使用unicode来处理所有字符的,
  
  第二,utf-8是每个汉字(unicode字符)用3个字节来存储。
  
  第三,用utf-8来send数据是不会出现乱码的,是后台程序没有正确解码才会出现乱码。
  
  第四,ajax发送数据的时候如果修改Content-Type为application/x-www-form-urlencoded",肯定是用post方式,而“太大的数据往往会出错”是用GET方式发送数据造成的。
  
  第五,用vbscript写的函数是用来把数据转成gbk编码(操作系统默认的编码方式。如果在繁体系统上就是big5之类的编码)的,而不是gb2312,两者的编码字符数量相差3倍左右。
  
  第六,用cookie来发送数据,一是很容易溢出,二是要不停的擦屁股,否则cookie里面的数据在每个http请求(包括图片和脚本请求)中都会被发送。三是并发几个http请求的时候,没有办法指定那个cookie是要发送给那个http请求的。
  
  用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");

来源:http://www.tulaoshi.com/n/20160219/1606359.html

延伸阅读
标签: Web开发
jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCharacterEncoding("GB2312"); response.setCharacterEncoding("GB2312"); jsp乱码问题在jsp里面就把 %@ page contentType="text/html; charset=gb2312" language="java" import="jav...
第一个方法: MySQL 4.1 中文乱码的问题 最近要将 MySQL 4.0 升级到 MySQL 4.1 ,发现了中文乱码的问题,希望以下见解对大家有用。 1. MySQL 4.1 在文字上有很大改进,它有了 Character Set 与 Collation 的慨念。 2. 在 MySQL 4.0 ,一般的程式都会将文字以拉丁文 ( latin) 来储存,就算我们输入中文字,结果仍是放在以拉丁文设置的文字栏...
标签: Web开发
说明一下我用的是JAVA,所以以下的内容都是其于JAVA的 AJAX与服务器通信是用XML的所以编码方式为UTF-8 我所有的页面都用的是GB2312的所以在与服务器通信时出现在乱码 首先从服务器向客户端(就是浏览器嘛)发送数据时就好解决了 直接在页面上面加上   %@ page contentType="text/html;charset=GB2312% 如果是用Servlet就加 response.s...
标签: Web开发
因AJAX接受数据时服务器默认是采用UTF-8的编码形式进行传送,所以在很多GB2312中文网页中应用AJAX回传数据经常会发生中文乱码。 解决AJAX中文回传乱码,其实就是将在服务器端文件加一个HEADER,指明送出的是什么编码流。比如 ASP文档就是在头部增加一行说明: Response.Charset("GB2312") PHP的示例如下: header('Content-T...
标签: Web开发
今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。 当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape函数。 使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type...

经验教程

141

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部