select触发js事件问题,,急,在线等

xsxxjsp 2009-09-22 10:26:34
把我的功能要求描述一下:在select中选择客户名称之后,后面收费凭号select中的值动态变化。
如果传递的客户名称是中文的话,Action中出现乱码。
如果传递的不是中文,能得到相应的值,但是我如何将得到的值传到jsp页面上,(页面无刷新)
首先我用select onchange一个事件
客户名称:<select name="d_khname" id="d_khname" onchange="khsf()">
<c:forEach items="${requestScope.khName}" var="m">
<option value="${m.value}">${m.value}</option>
</c:forEach>
</select>
收费凭号
<select name="sfbh">
<c:forEach items="${requestScope.m}" var="m">
<option value="${m.value.sfbh}">${m.value.sfbh}</option>
</c:forEach>
</select>
js中如下

function khsf(){
createXMLHttpRequest();
var khname=$("#d_khname").val();
var url="user.do?hxh=khsf&khname="+khname;
//document.location.replace(url);//如何选择使用这个跳转的话,Action中不会出现乱码
XMLHttpReq.open("post", url, true);
XMLHttpReq.onreadystatechange=callback;
XMLHttpReq.send(null); // 发送请求
}
function callback(){
var res=XMLHttpReq.responseText;
alert(res)//如何选择的客户名称不是中文的话,能够输出相应的值
}

Action中

//根据传来的客户名称来获取客户的收费标准
String khname = new String(request.getParameter("khname").getBytes(
"ISO-8859-1"), "UTF-8");
//我在配置文件中已经设置字符过滤类,可这里为何还是出现乱码
//System.out.println("khname=" + khname);
Map m = ud.khsf(khname);
System.out.println(m);
request.setAttribute("m", m);
PrintWriter out=response.getWriter();
out.print(m);

请各位高手帮帮忙,找出出现乱码的原因,如果不出现乱码,如何将值传来页面!
不知道我描述的是否明白。
...全文
1543 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
又学到一点,呵呵,不过不是你说的这个意思。
我现在已经在Action中处理过,得到一个集合map。
现在想把map还传到这个页面,我不知道在本页面怎样取。
在回调函数callback()中,res能够得到map的值,但是如何将这个map传递到jsp的select上呢
jaychou_lu 2009-09-22
  • 打赏
  • 举报
回复
改一点 url = "user.do" 不需要后面的参数
jaychou_lu 2009-09-22
  • 打赏
  • 举报
回复
是不是jsp里request方法取的有问题?
你这样试试吧 post传递

function khsf(){
createXMLHttpRequest();
var khname=$("#d_khname").val();
var url="user.do?hxh=khsf&khname="+khname;
var par = "hxh=khsf&hkname="+encodeURIComponent(khname);
//document.location.replace(url);
XMLHttpReq.open("post", url, true);
XMLHttpReq.onreadystatechange=callback;
XMLHttpReq.send(par);
}
function callback(){
var res=XMLHttpReq.responseText;
alert(res);
}
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
额,说清楚点,我在帖子中已经用request传了,还是返回到原来的页面,而且要求页面无刷新。
用Ajax在js中,我能取到map的值,但是在jsp页面上取不到啊.
如何在js中取值传到页面又是相当的麻烦,大家帮我想个解决办法
likejun45 2009-09-22
  • 打赏
  • 举报
回复
request
baiyang890505 2009-09-22
  • 打赏
  • 举报
回复
学习一下
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
谢谢各位的意见,呵呵,刚试过,乱码问题已经解决。
现在我如何将我取到的map的值传递到页面上。
andyan_2008 2009-09-22
  • 打赏
  • 举报
回复
option的value属性值改成英文的就不会出乱码了
浪尖赏花 2009-09-22
  • 打赏
  • 举报
回复
js中
url = encodeURI(url);
url = encodeURI(url);
java中
String khname = URLDecoder.decode(khname,"utf-8");
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 anyqu 的回复:]
能不能传过来和乱不乱码有关系吗?乱码也是传过来了!只不过解析的不对而己

http://hi.baidu.com/comdeng/blog/item/a3aad03d75fadcc59f3d62bf.html
[/Quote]
首先感谢各位的意见,学习了。
3#的意思我没看明白,我没有说传不传过来啊,你是不是误解我的意思了
anyqu 2009-09-22
  • 打赏
  • 举报
回复
能不能传过来和乱不乱码有关系吗?乱码也是传过来了!只不过解析的不对而己

http://hi.baidu.com/comdeng/blog/item/a3aad03d75fadcc59f3d62bf.html
BeenZ 2009-09-22
  • 打赏
  • 举报
回复
要转义的
3个方法
escape(), encodeURI(), encodeURIComponent()
这三个方法都是把网址中的非ASCII字符转为%XX的形式

三个方法的区别是分别有些字符是不做转义的:
escape() - @*/+
encodeURI() - !@#$&*()=:/;?+'
encodeURIComponent() - !*()'
chen_ya_ping 2009-09-22
  • 打赏
  • 举报
回复
js:
escape和 unescape
encodeURI和 decodeURI

xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
谢谢,呵呵,问题已经解决。我从Action中把Map的键组成一个数组,然后在js中循环取出来了,然后赋给select。
json我也不会,学习了。
jaychou_lu 2009-09-22
  • 打赏
  • 举报
回复
上面的代码没调试 有错误 现在更正
还有返回值改成"{\"res\":[{\"key\":\"key1\",\"value\":\"value1\"},{\"key\":\"key2\",\"value\":\"value2\"},{\"key\":\"key3\",\"value\":\"value3\"}]}"
都是拼接出来的"key","value"固定是字符串, "key1""key2"...是显示的值, "value1"...是option里的value属性
function test1(xmlhttp)
{
var returnvalue = xmlhttp.responseText;
json = eval("(" + returnvalue + ")");
var s = document.getElementById("s");
for (var i = 0; i < json.res.length; i++)
{
s.options.add(new Option(json.res[i].key, json.res[i].value));
}
}
jaychou_lu 2009-09-22
  • 打赏
  • 举报
回复
你也可以用json格式的 更简洁一些
假如你返回的数据是这样的"{\"res\":[{\"key1\":\"text1\",\"key2\":\"value1\"},{\"key1\":\"text2\",\"key2\":\"value2\"},{\"key1\":\"text3\",\"key2\":\"value3\"}]}"
function callback(){
var res=XMLHttpReq.responseText;
var json = eval("(" + res + ")");
var oselect = document.getElementById("sfbh");
for(var i = 0; i < json.length; i++)
{
oselect.options.add(new Option(json[i].key1, json[i].key2))
}
}

返回的数据格式是json 不清楚可以百度一下 json挺简单的
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jaychou_lu 的回复:]
你可以在后台把要返回的值组织成XML
然后在前台解析出来
加入到select里
可以通过这条语句
JScript codedocument.getElementById("sfbh").options.add(new Option(text, value));
上面的text是显示的字 value是option里的value属性
[/Quote]
解析成XML我没有做过,我现在是把Map中所有的键组成一个字符串传到js中处理,在向option中添加值,感觉好麻烦,你能不能给我说举个例子。
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
谢谢15#提点,我试试
jaychou_lu 2009-09-22
  • 打赏
  • 举报
回复
你可以在后台把要返回的值组织成XML
然后在前台解析出来
加入到select里
可以通过这条语句
document.getElementById("sfbh").options.add(new Option(text, value));

上面的text是显示的字 value是option里的value属性
xsxxjsp 2009-09-22
  • 打赏
  • 举报
回复
大家帮帮忙啊,遇到问题解决不了,自己先顶下

87,901

社区成员

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

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