这几天学到ajax,突然有点茫然了,jsp,xml,html,json,servlet,javascript,这些东西集中到一起变得没有了头绪,使劲缕,也没有理清思路,真希望有人帮忙里一下思路。
还有就是这两天周末,碰到了个棘手的问题,网上众说纷纭可是还是没有结决问题,在这里请教大家帮帮忙谢谢了!!!
下面是有关ajax中出现的乱码的问题,代码如下:
jsp文件  testGetPost.jsp
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>"> 
<script>

//xmlHttpRequest对象
 var xmlHttp;

        //创建xmlHttpRequest对象
        function createXMLHttpRequest(){
         if (window.ActiveXObject){
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                else if(window.XMLHttpRequest){
                 xmlHttp = new XMLHttpRequest();
                }
        }
        
        //发送参数字符串
        function createQueryString(){
          //得到姓名
                var Name = document.getElementById("Name").value;
                //得到爱好
                var Hobby = document.getElementById("Hobby").value;
              
                //得到生日
                var birthday = document.getElementById("birthday").value;
            
                
                //构造请求字符串
                var quertString = "Name=" + Name + "&Hobby=" + Hobby
                 + "&birthday=" + birthday;
                return quertString;
                 
        }
        
        //处理GET请求
        function doRequestUsingGET(){
         createXMLHttpRequest();
                var queryString = "GetAndPostExample?";
                queryString = queryString + createQueryString() + "&timeStamp=" + new Date().getTime();                                             
                xmlHttp.open("GET",queryString,true);     
                xmlHttp.onreadystatechange = handleStateChange;         
                xmlHttp.send(null);
        }
        
        //处理POST请求
        function doRequestUsingPOST(){
         createXMLHttpRequest();
                
                var url = "GetAndPostExample?timeStamp=" + new Date().getTime();
                var queryString = createQueryString();
                alert(url);
               
                xmlHttp.open("POST",url,true);        
                xmlHttp.onreadystatechange = handleStateChange;
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
                xmlHttp.send(queryString);
        }
        
        //回调方法
        function handleStateChange(){
         if (xmlHttp.readyState == 4){
          if (xmlHttp.status == 200){
                           //解析返回结果
           parseResults();
                        }
                }
        }
        
        //解析返回结果
        function parseResults(){
          var responseDiv = document.getElementById("serverResponse");
          if (responseDiv.hasChildNodes()){
           responseDiv.removeChild(responseDiv.childNodes[0]);
          }
          //返回文本构造一个文本节点
          var responseText = document.createTextNode(xmlHttp.responseText);
          responseDiv.appendChild(responseText);
        }
</script>
  </head>
  
  <body>
<h1>
输入你的姓名,爱好,和生日:
</h1>
<table>
  <tbody>
   <tr>
            <td>姓名:</td>
            <td><input type="text" id="Name"/>
   </tr>
        <tr>
            <td>爱好:</td>
            <td><input type="text" id="Hobby"/>
   </tr>
          <tr>
            <td>生日:</td>
            <td><input type="text" id="birthday"/>
   </tr>
  </tbody>
</table>

<form action="#">
  <input type="button" value="发送GET请求" onclick="doRequestUsingGET()"/>
  <br /><br />
  
  <input type="button" value="发送POST请求" onclick="doRequestUsingPOST()"/>
</form>
<br/>
<h2>服务器响应:</h2>
<div id="serverResponse"></div>
</body>
</html>
服务器端的代码  GetAndPostExample.java :package com.bjsxt.java.ajax;import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetAndPostExample extends HttpServlet {
 //处理方法
  protected void processRequest(HttpServletRequest request,
                                HttpServletResponse response, String method) throws
      ServletException, IOException {
    //设置响应内容类别 
    response.setContentType("text/html;charset=UTF-8");
         //得到参数
    String Name = request.getParameter("Name");
    String Hobby = request.getParameter("Hobby");
    String birthday =request.getParameter("birthday");
    
    //创建响应文本
    String responseText = "你好 :" + Name +"。您的兴趣是:"  + Hobby + "。您的生日是" + birthday
        + "。" + " [传参方法: " + method + "]";
    //传回浏览器
    PrintWriter out = response.getWriter();  
    out.println(responseText);
    //关闭写出流
    out.close();
  }
  //Initialize global variables
public void init() throws ServletException {
  
  }
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request,response,"GET");

}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response,"POST");
}
//Clean up resources
 public void destroy() {
  
  }}

解决方案 »

  1.   

    从服务器端向客户端发送响应时用response.setCharacterEncoding("UTF-8");放在返回流之前。
      

  2.   

    response.setContentType("text/html;charset=gbk"); //看情况 选择  gbk  或者 utf-8
      

  3.   

    还有一个是否你的filer里面也设置字符编码 是否编码一致
      

  4.   

    忙了两天的问题终于解决了,谢谢各位了,上面的意见已经试过了,但是还是没有解决问题。刚刚搜到的资料是这样的:
    [color=#FF9900]js代码:
          //两次编码,处理乱码
           queryString  = encodeURI(queryString );   
          queryString  = encodeURI(queryString ); 
    java代码:
         //服务器段解码解决乱码问题  文件编码=数据库编码=输出编码=网页编码 
     Name= java.net.URLDecoder.decode(Name,"UTF-8");  
     Hobby= java.net.URLDecoder.decode(Hobby,"UTF-8");  
     birthday= java.net.URLDecoder.decode(birthday,"UTF-8");  
    浏览器端译码两次,服务器端解码的时候在设定一次UTF-8就可以了!!
    再次感谢各位O(∩_∩)O~
      

  5.   

    很简单。。     你传参的时候传了中文过去,所以乱了。 你传参的时候这样传:    xxxxx ?param =  encodingURI(encodingURI(参数值))这样传,在前台就对值进行了编码。。在后面用
    java.net.Decode.decode(reuqest.getParameter("param"),"UTF-8");
    拿出来的值就不会乱了。
      

  6.   

     var url = encodeURI("show?name="+name+"&time="+(new Date().getTime()));
    jquery对ajax的封装相当的好,lz可以试试
      

  7.   

    谢谢大家,真的很感谢! CSDN 很棒!!