ajax中中文乱码的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax中中文乱码的问题相关的知识,希望对你有一定的参考价值。
ajax中中文乱码的问题,在input,文体框中输入中文就是???怎么解决啊
<script type="text/javascript" src="ajax.js"></script>
<form name="myform" action="d" emthod="POST">
<input type="text" name="user" value="" onblur="funphp100('php100')">
<div id="php100"></div>
</form>
for.php
<?php
if($_GET[id])
echo $_GET[id];
?>
ajax.js
var xmlHttp;
function createXMLHttpRequest()
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
function funphp100()
var f=document.myform.user.value;
createXMLHttpRequest();
xmlHttp.open("POST","for.php?id="+f,true);
xmlHttp.onreadystatechange=byphp;
xmlHttp.send(null);
function byphp()
if(xmlHttp.readyState==4)
if(xmlHttp.Status==200)
var byphp100=xmlHttp.responseText;
document.getElementById('php100').innerhtml=byphp100;
这是由于客户端请求与服务器端相应编码不一致。
1.在你的页面上,你需要指定页面的编码,如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2.在你的服务器端也要指定输出编码,如:
response.charset = "utf-8";
3.你的前端页面和后台处理的页面字符编码必须同样为utf-8。
这样一般就不会乱码了,如果还乱,那么你就用escape()将请求进行编码后再发送,而后台也使用unescape()将请求进行解码后再处理就可以了。本回答被提问者采纳
关于AJAX使用中出现中文乱码的问题
自己初学AJAX,遇到一个棘手的bug就是xmlHttp.open("get",url,false);url里面有中文,结果出现乱码。不过最后在百度,和诸位博主的帮助下,成功解决了。
解决方法:
<SCRIPT language="JavaScript" type="text/javascript">
function query(){
var sname= document.queryForm.sname.value;
var xmlHttp;
if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();
}
else{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//定义了Msxml2.XMLHTTP对象(不同浏览器定义方法不一样,它具有异步提交功能)
}
xmlHttp.open("get","query.do?sname="+sname,false);//get表示以get方式提交,p6.jsp表示提交到的页面,true表示异步提交。注意,这句代码运行时并没有提交。
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
result.innerHTML = xmlHttp.responseText;
}
else{
result.innerHTML = "正在查询,请稍等...";
}
}
xmlHttp.send();//xmlHttp异步提交
}
</SCRIPT>
这段代码有个问题,就是query.do?sname="+sname,会出错,就算你写成query.do?sname=你好",传到action里面也是一个??,就是乱码.
怎么解决呢?在var sname= document.queryForm.sname.value;
sname=encodeURI(sname);//对字符串进行编码
这样传到action里面就是中文了,
action代码:
public class QueryAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String sname = request.getParameter("sname");
System.out.println("得到"+sname);
try{
sname = new String(sname.getBytes("ISO-8859-1"),"utf-8");
}catch(Exception ex){}
System.out.println("转码"+sname);
StudentDao sdao = new StudentDao();
ArrayList stus = sdao.queryStuByName(sname);
request.setAttribute("stus", stus);
return new ActionForward("/p6.jsp");
}
}
这里打印出来就
得到(传过来的参数)
转码??
还是会出现??,怎么解决?
把try{
sname = new String(sname.getBytes("ISO-8859-1"),"utf-8");
}catch(Exception ex){}删除掉,就正常了.
归根到底,就是中文编码的问题,因为ajax的默认编码是ISO-8859-1,所以你就算写了filter过滤器也不能解决这个问题。jsp开头写<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>也没有用。
最后提供一下中文过滤器的代码,可以解决很多jsp显示中文乱码的问题:
Filter.java
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Efilter implements Filter {
public Efilter(){
//System.out.println("过滤构造函数");
}
private String encodingName;
public void init(FilterConfig fc) throws ServletException {
// 初始化函数,服务器运行能自动运行一次
//System.out.println("过滤器init函数");
encodingName =fc.getInitParameter("encodingName");//得到局部参数
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
//每次提交都会运行
//System.out.println("过滤器doFilter函数");
request.setCharacterEncoding(encodingName);//解决中文问题
//过滤器是在提交到处处理模块之前运行,所以这里要将请求向后传递
chain.doFilter(request,response);
}
public void destroy() {
//消亡函数
//System.out.println("过滤器destroy函数");
}
}
之后到web.xml里面进行注册:
<!-- 注册过滤器-->
<filter>
<filter-name>Efilter</filter-name>
<filter-class>filter.Efilter</filter-class>
<init-param>
<param-name>encodingName</param-name>
<param-value>gb2312</param-value><!-- 可以识别简体中文-->
</init-param>
</filter>
<filter-mapping>
<filter-name>Efilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上是关于ajax中中文乱码的问题的主要内容,如果未能解决你的问题,请参考以下文章
chrome 开发者工具中中文乱码,ajax请求返回的json串也不能自动格式化了,详见截图,求告知怎么设置...