开发项目用Ajax的Post方法提交信息到请求的servlet,输出遇到中文乱码,纠结了好几天,总结了网络上很多高手的心得,用了两步解决了乱码:
- 在JS端,对提交的字符串进行两次编码:
- <%@pagecontentType=@H_403_12@"text/html"pageEncoding=@H_403_12@"gbk"%>
- <!DOCTYPEHTMLPUBLIC@H_403_12@"-//W3C//DTDHTML4.01Transitional//EN"
- @H_403_12@"http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <Metahttp-equiv=@H_403_12@"Content-Type"content=@H_403_12@"text/html;charset=gbk">
- <title>JSPPage</title>
- <scripttype=@H_403_12@"text/javascript">
- varreq;
- functionvalidate(){
- //获取表单提交的内容
- varidField=document.getElementById(@H_403_12@"userName").value;
- //要发送的字符串数据
- varcontent=@H_403_12@"id=hello&message="+idField+@H_403_12@"&say=我是帅哥";
- //重点:对content含中文字符的字符串进行两次编码
- content=encodeURI(content);
- varurl=@H_403_12@"validate.do";
- //创建一个XMLHttpRequest对象req
- if(window.XMLHttpRequest){
- //IE7,Firefox,Opera支持
- req=newXMLHttpRequest();
- }elseif(window.ActiveXObject){
- //IE5,IE6支持
- newActiveXObject(@H_403_12@"Microsoft.XMLHTTP");
- }
- req.open(@H_403_12@"post",url,true);
- req.setRequestHeader(@H_403_12@"Content-Type",@H_403_12@"application/x-www-form-urlencoded");
- req.onreadystatechange=callback;
- //send函数发送请求,参数
- req.send(content);
- functioncallback(){
- //alert(req.readyState);
- //alert(req.status);
- if(req.readyState==4&&req.status==200){
- //alert(req.responseText);
- varcheck=req.responseText;
- show(check);
- functionshow(str){
- document.getElementById(@H_403_12@"info").innerHTML=str;
- </script>
- </head>
- <body>
- <h1>TestAjax</h1><p>
- <formaction=@H_403_12@""method=@H_403_12@"get"name=@H_403_12@"form">
- <br>
- 输入用户名:
- <inputtype=@H_403_12@"text"size=@H_403_12@"10"maxlength=@H_403_12@"8"id=@H_403_12@"userName"name=@H_403_12@"name"onblur=@H_403_12@"validate()">
- <spanid=@H_403_12@"info"></span>
- 输入商品名:
- <inputtype=@H_403_12@"submit"name=@H_403_12@"refer">
- </form>
- </body>
- </html>