如果传递的是英文的话,没有问题,能正常取到值。如果是中文,会显示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>
<%@ 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>
unescape()//解密 ,还原成中文
2 者要结合起来用
<%@ 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> </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);
%>
String userName=request.getParameter("userName");
out.println(userName);这里接到的是转变后的,unescape()还原,javascript里还原
>> 进行传递
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));
在servlet类中
我通过的是:String state = request.getParameter("state");结果state显示的为??
如果直接在url后面加?test=中文,这个没问题,把ISO-8859-1
如果直接在url后面加?test=中文,这个没问题,把ISO-8859-1转为GBK就可以了。
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通常解决中文乱码的方式来解决。我测试过了,正常。