把我的功能要求描述一下:在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);请各位高手帮帮忙,找出出现乱码的原因,如果不出现乱码,如何将值传来页面!
不知道我描述的是否明白。
如果传递的客户名称是中文的话,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);请各位高手帮帮忙,找出出现乱码的原因,如果不出现乱码,如何将值传来页面!
不知道我描述的是否明白。
escape和 unescape
encodeURI和 decodeURI
3个方法
escape(), encodeURI(), encodeURIComponent()
这三个方法都是把网址中的非ASCII字符转为%XX的形式 三个方法的区别是分别有些字符是不做转义的:
escape() - @*/+
encodeURI() - !@#$&*()=:/;?+'
encodeURIComponent() - !*()'
url = encodeURI(url);
url = encodeURI(url);
java中
String khname = URLDecoder.decode(khname,"utf-8");
现在我如何将我取到的map的值传递到页面上。
用Ajax在js中,我能取到map的值,但是在jsp页面上取不到啊.
如何在js中取值传到页面又是相当的麻烦,大家帮我想个解决办法
你这样试试吧 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);
}
我现在已经在Action中处理过,得到一个集合map。
现在想把map还传到这个页面,我不知道在本页面怎样取。
在回调函数callback()中,res能够得到map的值,但是如何将这个map传递到jsp的select上呢
然后在前台解析出来
加入到select里
可以通过这条语句
document.getElementById("sfbh").options.add(new Option(text, value));
上面的text是显示的字 value是option里的value属性
假如你返回的数据是这样的"{\"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挺简单的
还有返回值改成"{\"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));
}
}
json我也不会,学习了。