关于 AJAX的问题

vsfigo 2009-07-09 03:29:43
我是自己做测试玩玩小例子就出现了下面两个疑问
问题一:乱码问题。

首先在JSP页面设置
<%@ page pageEncoding="utf-8" contentType="text/html;Charset=utf-8"%>

AJAX提交 用的是POST,然后在 send中发送值
var id= document.forms[0].elements("id").value;
var name= document.forms[0].elements("name").value;
var url = "<%=request.getContextPath()%>/ylsuccess.do?actionMethod=getAjax";
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send("id="+id+"&name="+name);

ACTION中取值以及返回值到页面
String id = new String(af.getId().getBytes("ISO8859-1"),"utf-8");
String name = new String(af.getName().getBytes("ISO8859-1"),"utf-8");
System.out.println(id+" "+name);//转码后显示没问题,能显示中文
response.setCharacterEncoding("utf-8");//设置页面返回值的编码方式
PrintWriter out = response.getWriter();


//这是页面响应的方法,值我都显示在textarea中
function updatePage()
{
if(xmlHttp.readystate == 4)
{
var response = xmlHttp.responseText;
document.all.divText.value=response;
}
}



那么下面请看textarea显示的内:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">

var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}

if (!xmlHttp && typeof XMLHttpRequest != 'undefined')
{
xmlHttp = new XMLHttpRequest();
}

function cell()
{
var id= document.forms[0].elements("id").value;
var name= document.forms[0].elements("name").value;
var url = "/YL/ylsuccess.do?actionMethod=getAjax";
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send("id="+id+"&name="+name);
}

function updatePage()
{
if(xmlHttp.readystate == 4)
{
var response = xmlHttp.responseText;
document.all.divText.value=response;
}
}

function selectAll(object)
{
var page_object = document.forms[0];
if(object.value=="全选")
{
for(var i=0;i<page_object.elements.length;i++)
{
var elementType = page_object.elements[i];
if(elementType.type=="checkbox")
{
elementType.checked=true;
}
}
object.value="全不选";
}
else
{
for(var i=0;i<page_object.elements.length;i++)
{
var elementType = page_object.elements[i];
if(elementType.type=="checkbox")
{
elementType.checked=false;
}
}
object.value="全选";
}
}

function goto()
{
window.location.href=""
}
</script>
</head>

<body>
<form name="AjaxTextForm" method="post" action="/YL/ylsuccess.do">
<input type="button" value="GO!!!" onclick="goto()"/>
<table align="center" border="1" bgcolor="#OBVBBb">
<tr>
<td>选择<input type="checkbox" name="check" value="全选" onClick="selectAll(this);" ></td>
<td>ID:</td>
<td>NAME:</td>
<td>UPDATEID:</td>
<td>UPDATENAME:</td>
</tr>
<tr>
<td><input type="checkbox" name="checknum"></td>
<td><input type="text" name="id" value="爱上对方"></td>
<td><input type="text" name="name" value="士大夫" onblur="cell();"></td>
<td><input type="text" name="ids" value=""></td>
<td><input type="text" name="updateNames" value=""></td>
</tr>
</table>
<div id="div" style="color:red" align="center">
<textarea id="divText" rows="10" cols="80"></textarea>
</div>
</form>
</body>
</html>

各位看到没有? 在ID和NAME的value中都出现了乱码,但是“选择”和“全选”这两个不是乱码。这到底是怎么回事?

问题二:我怎么指定xmlHttp.responseText返回的值?为什么返回的是整个JSP页面的代码?如果我想返回ID和NAME的值呢?
那在ACTION中该怎么做?

望大家给点意见
...全文
37 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
一师兄 2009-07-13
  • 打赏
  • 举报
回复
1.xmlHttp.send("id="+encodeURI(id)+"&name="+encodeURI(name));
2.加过滤器
3.数据库连接字符编码要设定:jdbc:mysql://192.168.0.102:3306/fft_jz?useUnicode=true&characterEncoding=UTF-8&
fanyuanwaifdl 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 why_java 的回复:]
分的不怎么好..
编程习惯很重要.
[/Quote]1
wind_rosebush 2009-07-10
  • 打赏
  • 举报
回复
强烈建议下lz放在code里面
why_java 2009-07-10
  • 打赏
  • 举报
回复
分的不怎么好..
编程习惯很重要.
north86 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dm520 的回复:]
引用 8 楼 popbao 的回复:
传中文参数时候:encodeURI(encodeURI(url))
获取参数的时候:java.net.URLDecoder.decode(param,"utf-8");

谁让Ajax只支持UTF-8尼。



是的Ajax只支持UTF-8
[/Quote]

是吗》?貌似用gb2312都不会乱码啊!
teedry 2009-07-10
  • 打赏
  • 举报
回复



xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send("id="+id+"&name="+name);
dm520 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 popbao 的回复:]
传中文参数时候:encodeURI(encodeURI(url))
获取参数的时候:java.net.URLDecoder.decode(param,"utf-8");

谁让Ajax只支持UTF-8尼。
[/Quote]

是的Ajax只支持UTF-8
奸商德 2009-07-10
  • 打赏
  • 举报
回复
传中文参数时候:encodeURI(encodeURI(url))
获取参数的时候:java.net.URLDecoder.decode(param,"utf-8");

谁让Ajax只支持UTF-8尼。
xinyisi015 2009-07-10
  • 打赏
  • 举报
回复
encodeURI有时是要重复用两遍的

encodeURI(url)
encodeURI(url)
vsfigo 2009-07-10
  • 打赏
  • 举报
回复
问题二我解决了
原来
PrintWriter out = response.getWriter();
out.print(id+name); //这里就可以指定你要向页面返回的值。。嘿嘿
out.flush();
out.close();
问题一还是有问题。。。
不管是用encodeURI 还是 encode把那两个值传回去 都有问题。。。
还是请大家看看呀
bingsha1976 2009-07-09
  • 打赏
  • 举报
回复
第一问题
xmlHttp.send("id="+encodeURI(id)+"&name="+encodeURI(name));


第二问题参考这些

public ActionForward findGoodsInit(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
GoodsBusiness goodsBusiness = new GoodsBusiness();
List goodses = goodsBusiness.findGoodsInit();

StringBuffer xmlTree = new StringBuffer(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
xmlTree.append("<goodses>");
// xmlTree根节点为<tree>

// 必须的
response.setContentType("text/xml;charset=utf-8");
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}

for (int i = 0; i < goodses.size(); i++) {
GoodsForm goods = (GoodsForm) goodses.get(i);
xmlTree.append("<goods>");
xmlTree.append("<goodsId>" + goods.getGoods_id() + "</goodsId>");
xmlTree.append("<goodsCode>" + goods.getGoods_code()
+ "</goodsCode>");
xmlTree.append("<goodsMcode>" + goods.getGoods_mcode()
+ "</goodsMcode>");
xmlTree.append("<goodsName>" + goods.getGoods_name()
+ "</goodsName>");
xmlTree.append("<goodsUnit>" + goods.getGoods_unit()
+ "</goodsUnit>");
xmlTree.append("<goodsModel>" + goods.getGoods_model()
+ "</goodsModel>");
xmlTree.append("<goodsStandard>" + goods.getGoods_standard()
+ "</goodsStandard>");
xmlTree.append("<goodsPrice>" + goods.getGoods_price()
+ "</goodsPrice>");
xmlTree.append("<goodsType>" + goods.getGoods_type_name()
+ "</goodsType>");
xmlTree.append("</goods>");
}
xmlTree.append("</goodses>");
out.print(xmlTree.toString());
out.flush();
out.close();
return null;
}




pingzi_1119 2009-07-09
  • 打赏
  • 举报
回复
代码看起来太累了,楼主下次把代码放到code里发啊,那样容易看些

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧