如果传递的是英文的话,没有问题,能正常取到值。如果是中文,会显示null,有的网友说用javascript中的escape(string)就没问题,但是不行。不知大家可有研究?谢了。一、TestAjax.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head><body>
<form name="form1" method="post" action="">
  <p>
    <input name="username" type="text" id="username" onChange="f()">
</p>
  <p>
    <input name="userpass" type="text" id="userpass">
</p>
  <p>
    <input name="userxm" type="text" id="userxm">
  </p>
</form>
</body>
</html>
<script language="javascript" type="text/javascript">function f()
{
        http_request = false;        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
 
 
  var city = document.getElementById("username").value;
//  var state = document.getElementById("state").value;
  document.form1.userpass.value=city;
  var url = "/TestAjaxSub.jsp?username=" + escape(city);
  http_request.open("POST", url, true);
  http_request.send(null);
  http_request.onreadystatechange = alertContents;
  
}
    function alertContents() {        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                alert(http_request.responseText);
//document.getElementById("userpass").value = http_request.responseText
            } else {
                alert('There was a problem with the request.');
            }
        }    }
</script>二、testAjaxSub.jsp<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>无标题文档</title>
</head><body>
<%!   //此处进行转换也没有用
public String getStr(String str)
{
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e)
{
return "null";
}
}
%>
<%String username=request.getParameter("username");
out.println(username);%>
</body>
</html>

解决方案 »

  1.   

    escape()//加密,把中文转化成英文,所以传的时候没问题
    unescape()//解密 ,还原成中文
    2 者要结合起来用
      

  2.   

    但我结合了escape()和unescape()转换过也不行的呀!一、TestAjax.jsp:
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body>
    <table width="358" border="1" align="center">
          <tr>
            <td colspan="2">测试Ajax</td>
          </tr>
          <tr>
            <td width="132">输入一个数:</td>
            <td width="210"><input name="userName" type="text" id="userName"></td>
          </tr>
          <tr>
            <td>返回的值为:</td>
            <td>
              <input type="text" name="userPass" id="userPass">
          </td>
          </tr>
          <tr>
            <td>
              <input type="button" name="Submit" value="提交" onClick="onSubmit()">
            </td>
            <td>&nbsp;</td>
          </tr>
        </table>
    </body>
    </html>
    <script language="javascript" type="text/javascript">function onSubmit()
    {
            http_request = false;        if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }        if (!http_request) {
                alert('Giving up :( Cannot create an XMLHTTP instance');
                return false;
            }
     
     
      var userName = document.getElementById("userName").value;
      //  var state = document.getElementById("state").value;
      var url = "/TestAjaxSub.jsp?userName=" + escape(userName);
      http_request.open("POST", url, true);
      http_request.send(null);
      http_request.onreadystatechange = returnValue;
      
    }function returnValue() {        if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    //alert(http_request.responseText);
                  document.getElementById("userPass").value = unescape(http_request.responseText)
                } else {
                  alert('There was a problem with the request.');
                }
            }    }
    </script>
    二、testAjaxSub.jsp
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%
    String userName=request.getParameter("userName");
    out.println(userName);
    %>
      

  3.   

    unescape()//解密 ,还原成中文要在二、testAjaxSub.jsp里使用
    String userName=request.getParameter("userName");
    out.println(userName);这里接到的是转变后的,unescape()还原,javascript里还原
      

  4.   

    1.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。 
    >> 进行传递 
    string Name = "中文参数"; 
    Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name)); 
    >> 进行接收 
    string Name = Request.QueryString["Name"]; 
    Response.Write(Server.UrlDecode(Name)); 2.如果是从 .HTML 文件向 .Aspx 文件进行传递中文参数的话(即不从后台用 Redirect()方法进行 Url 转换)。一样要将传递的中文参数进行编码,在接收时再进行解码。 
    >> 进行传递 
    <script language="JavaScript"> 
    function GoUrl() 

    var Name = "中文参数"; 
    location.href = "B.aspx?Name="+escape(Name); 

    </script> 
    <body onclick="GoUrl()"> 
    >> 进行接收 
    string Name = Request.QueryString["Name"]; 
    Response.Write(Server.UrlDecode(Name)); 
      

  5.   

    我现在的问题是,我传递一个中文参数到一个servlet类中,然后我要正确得到这个中文参数,那该怎么做恩呢?
    在servlet类中
    我通过的是:String state = request.getParameter("state");结果state显示的为??
      

  6.   

    我escape后传过去的参数为NULL,不进行escape传过去的英文正常,中午乱码。我是用 http_request.send(data);传送过去的。
    如果直接在url后面加?test=中文,这个没问题,把ISO-8859-1
      

  7.   

    我escape后传过去的参数为NULL,不进行escape传过去的英文正常,中午乱码。我是用 http_request.send(data);传送数据过去的。
    如果直接在url后面加?test=中文,这个没问题,把ISO-8859-1转为GBK就可以了。
      

  8.   

    var city = f.username.value;                               //document.getElementById("username").value;
      var state= f.userpass.value;                               //document.getElementById("userpass").value;
      //document.form1.userpass.value=city;
      var url = "./TestAjaxSub.jsp?username=" + city+"&userpass="+state;  //对应于Get
    -------------------------------------------------------------修改上述几个地方。然后在TestAjaxSub.jsp中按照JSP通常解决中文乱码的方式来解决。我测试过了,正常。