自己初学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使用中出现中文乱码的问题的更多相关文章

  1. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

  2. ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 复制代码 代码如下: $.ajax({ dataType : ‘json',type : ‘POST',url : ‘ht ...

  3. Ajax提交后台中文乱码问题

    今天项目组同事反映,之前有一个正常的请求,今天突然后台获取参数的值出现了中文乱码,怀疑是之前更新jar包所致,笔者仔细想了想更新的内容,仿佛没有涉及到编码的变更啊,然后开始排查,首先后台加了强制以ut ...

  4. ajax提交 返回中文乱码问题

    接口返回数据相关 使用@ResponseBody后返回NUll 说明:刚把后台运行起来,兴高采烈的测试接口数据,结果无论如何都是返回null, 最终通过各种百度,发现原来是没有引入关键的Jar包. 解 ...

  5. 数据传递-------ajaxJson------spring3mvc中使用ajax传json中文乱码解决

    参考来源:http://blog.csdn.net/dangerous_fire/article/details/25904225 第一种解决方法,适用所有情况 因为在controller中返回jso ...

  6. ajax参数传递时中文乱码问题

    ajax传递参数时,一般就是js向程序页面传递和程序向js文件传递两种情况,当出现中文汉字时,会出现乱码. 因为存在上述两种情况,所以解决起来也要分开对待. 这里是php系统中遇到的问题,所以以php ...

  7. ajax GET 传输中文乱码

    关于客户端get传输到服务端乱码解决: <script> //ajakx 传输变量 var xmlhttp; if (window.XMLHttpRequest) {// code for ...

  8. struts2 action获取ajax提交数据中文乱码问题

    有个人和我问题相同,地址在这: 解决方法: 在ajax的属性添加这句:contentType:'application/x-www-form-urlencoded; charset=utf-8',

  9. ajax url参数中文乱码解决

    1.较好的处理办法,对js的url中的中文参数值使用两次encodeURI(),即 encodeURI(encodeURI("url的中文参数值")), java代码中使用URLD ...

随机推荐

  1. 使用缓存Memcache存储access_token

    接上篇文本,千辛万苦终于拿到了access_token. 正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效.目前,获取access_token ...

  2. sphinx实时索引和高亮显示

    sphinx实时索引和高亮显示 时间 2014-06-25 14:50:58  linux技术分享 -欧阳博客 原文  http://www.wantlearn.net/825 主题 Sphinx数据 ...

  3. Xilinx ISE14.1用Verilog语言实现一个半加器并测试

    <一>建立一个工程 注:Xilinx ISE的安装在此不再过多说明,网上有参考资料 1.打开软件进入如下界面 2.创建工程 File-->New Project 3.创建文件(我取名 ...

  4. Codeforces Round #386 (Div. 2) C. Tram

    C. Tram time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  5. 0_Simple__matrixMulCUBLAS

    使用CUDA的线性代数库cuBLAS来计算矩阵乘法.这里主要记录调用规则,关于乘法函数中详细的参数说明和调用规则见另一篇随笔. ▶ 源代码: #include <assert.h> #in ...

  6. linux分析日志的一些常用方法

    head -n 2016_05_23_access_log |grep "/859" 显示前10000行中包含 /859 的记录 增加 |wc -l  则改为输出记录数 cat 2 ...

  7. C#只能运行一个实例程序的方法

    互斥进程(程序), 简单点说,就是在系统中只能有该程序的一个实例运行. 现在很多软件都有这功能,如Maxthon 可以设置为"只允许打开一个窗体",还有Bitcomet等. 我也是 ...

  8. linq中group by

    本文导读:LINQ定义了大约40个查询操作符,如select.from.in.where.group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据.L ...

  9. mysql存储过程分库分表

    -- 存储过程创建库  分为两条语句删除和创建DELIMITER $$USE myplan $$DROP PROCEDURE IF EXISTS createDBN $$CREATE PROCEDUR ...

  10. [转载] 谷歌技术"三宝"之谷歌文件系统

    转载自http://blog.csdn.net/opennaive/article/details/7483523 题记:初学分布式文件系统,写篇博客加深点印象.GFS的特点是使用一堆廉价的商用计算机 ...