下拉条的连动-ajax方式
客户端触发:
<select id="category1" onchange="changecategory()">
<option value="-1">所有一级类别</option>
<%
for(int i=0; i<topCategorys.size(); i++) {
Category c = topCategorys.get(i);
%>
<option value="<%=c.getId() %>"><%=c.getName() %></option>
<%
}
%>
</select>
<select id="category2">
<option value="-1">所有二级类别</option>
</select>
创建XHR:
<script type="text/javascript">
var req;
function changecategory() {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
var id = document.getElementById("category1").options[document.getElementById("category1").selectedIndex];
var url = "getchildcategory.jsp?id=" + escape(id.value);
req.open("GET", url, true);
req.onreadystatechange=callback;
req.send(null);
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
//parseXml(req.responseXML);//方式1:XML方式(太麻烦)
//parse(req.responseText);//方式2:字符方式(最常用)
eval(req.responseText);//方式3:动态生成javascript方式(最常用)
}
}
}
function parseXml(msg) {
var categorys = msg.getElementsByTagName("categorys")[0];
//alert(categorys.childNodes.length);
document.getElementById("category2").length=categorys.childNodes.length+1;
document.getElementById("category2").selectedIndex=0;
for(var i=0; i<categorys.childNodes.length; i++) {
var category = categorys.childNodes[i];
var id = category.childNodes[0].childNodes[0].nodeValue;
//alert(id);
var name = category.childNodes[1].childNodes[0].nodeValue;
//alert(name);
document.getElementById("category2").options[i+1].value=id;
document.getElementById("category2").options[i+1].text=name;
}
}
function parse(msg) {
//alert("|" + msg + "|");
msg = msg.replace(/(^\s*)|(\s*$)/g, "");
if(msg == null || new String(msg) == "") {
return;
}
var categorys = msg.split("-");
for(var i=0; i<categorys.length; i++) {
var category = categorys[i].split("&");
var id = category[0];
var name = category[1];
document.getElementById("category2").length=categorys.length+1;
document.getElementById("category2").selectedIndex=0;
document.getElementById("category2").options[i+1].value=id;
document.getElementById("category2").options[i+1].text=name;
}
}
</script>
server处理方式(getchildcategory.jsp中的内容),返回包含处理结果的javascript代码:
<%
String strId = request.getParameter("id");
int id = -1;
if(strId != null && !strId.trim().equals("")) {
id = Integer.parseInt(request.getParameter("id"));
}
Category parent = CategoryMgr.getInstance().loadById(id);
List<Category> childs = parent.getChilds();
StringBuffer buff = new StringBuffer();
//方式1:XML方式
/*
for(int i=0; i<childs.size(); i++) {
Category c = childs.get(i);
buff.append("<category><id>" + c.getId() + "</id><name>" + c.getName() + "</name></category>");
}
buff.insert(0,"<categorys>");
buff.append("</categorys>");
*/
//方式2:字符方式
/*
for(int i=0; i<childs.size(); i++) {
Category c = childs.get(i);
buff.append(c.getId() + "&" + c.getName() + "-");
}
if(childs.size() > 0){
buff.deleteCharAt(buff.length()-1);
}
*/
//方式3:动态生成javascript方式
for(int i=0; i<childs.size(); i++) {
Category c = childs.get(i);
buff.append("document.getElementById('category2').options[" + (i+1) + "].value=" + c.getId() + ";\n");
buff.append("document.getElementById('category2').options[" + (i+1) + "].text='" + c.getName() + "';\n");
}
buff.insert(0, "document.getElementById('category2').selectedIndex=0;\n");
buff.insert(0, "document.getElementById('category2').length=" + (childs.size()+1) +";\n");
System.out.println(buff.toString());
//可以采用清除缓存的方法,如下
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-store"); //HTTP1.1
response.setHeader("Pragma", "no-cache"); //HTTP1.0
response.setDateHeader("Expires", 0);
response.getWriter().write(buff.toString());
%>
下拉条的连动-ajax方式的更多相关文章
- 通过Ajax方式上传文件,使用FormData进行Ajax请求
通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...
- ajax方式提交带文件上传的表单,上传后不跳转
ajax方式提交带文件上传的表单 一般的表单都是通过ajax方式提交,所以碰到带文件上传的表单就比较麻烦.基本原理就是在页面增加一个隐藏iframe,然后通过ajax提交除文件之外的表单数据,在表单数 ...
- OSS web直传 ajax方式 上传图片、文件
部分js代码 send_request = function(){//这是从后台获取认证策略等信息. var htmlobj=$.ajax({url:root+"/service/polic ...
- [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求
通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...
- 百度编辑器ueditor通过ajax方式提交,不需要事先转义字符的方法(异常:从客户端(xxx)中检测到有潜在危险的 Request.Form 值)
最近项目中使用百度编辑神器ueditor,确实是很好用的一款编辑器.官网教程提供的与后端数据交互都是跟表单方式有关的,项目中使用的是ajax方式提交,因此出现了不少问题,现在记录备忘下. 环境:.ne ...
- jquery.validate ajax方式验证
在做网站的时候有一块需要用到jquery.validate插件 ajax方式的方式来验证原始密码是否正确,研究了研究加上博客园朋友的帮助,终于实现了.贴出代码 <script type=&quo ...
- [实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册
写在前面 今天贴合到实际的客户需求仔细的想了下,其实在userInfo这个类里面很多字段都不是必须的.有很多的事业单位根本就不能上网,填写的邮箱也是exchange的,个人的详细信息都在ad里面可以取 ...
- python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)
一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...
- 阿里OSS ajax方式 web直传
部分js代码 send_request = function(){//这是从后台获取认证策略等信息. var htmlobj=$.ajax({url:root+"/service/polic ...
随机推荐
- c语言字符串比较函数strcmp
strcmp(s1,s2) 说明: 当s1<s2时,返回值<0 当s1=s2时,返回值=0 当s1>s2时,返回值>0两个字符串自左向右逐个字符相比(按ASCII值大小相比较) ...
- mysql用root用户启动后其他用户无法启动不问题
问题描述:用root账户启动mysql后,在用mysql用户或其他非root账户启动不了mysql问题解决:通过看mysql的err日志,发现 Failed to open log (robert-b ...
- Oracle之PLSQL总结
基本数据类型变量 1. 基本数据类型 Number 数字型 Int 整数型 Pls_integer 整数型,产生溢出时出现错误 Binary_integer 整数型,表示带符号 ...
- Avoid The Lakes--poj3620
Avoid The Lakes Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7023 Accepted: 3735 D ...
- jquery multiselect控件
http://www.erichynds.com/blog/jquery-ui-multiselect-widget
- UVA 120 Stacks of Flapjacks
每次从最底部开始处理,如果不是最大值,则把最大值翻到底部.这就是最优解.原理自己模拟一下就好... 注意半径不是从1开始.数据处理要仔细. #include <iostream> #inc ...
- QT使用WOL实现远程一键开机(局域网)
功能:让关机的电脑一键开机,需要目标电脑的主板支持,并且插上网线: 效果:相当于手动按了一下目标电脑的开关机按钮. 没啥技术含量,简单开说... 1.获取目标机MAC地址 QByteArray sMa ...
- 致终将火爆的NFC——ISO14443 TypeA
毫无疑问,当NFC终端越来越普及,逐渐成为智能手机标配功能后,我们终将迎来NFC的火爆.国内NFC应用最为广泛的将是TypeA,如Mifare.NFC Tag.移动支付等,所以接下来将主要研究Type ...
- 可获取公网IP的网址
由于代理检验需要,现在小站经受不住大流量测试,于是多收集了一些. http://1111.ip138.com/ic.asp, http://ip.360.cn/IPShare/info, http:/ ...
- QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色、背景色、文字颜色以及基色)
----我的生活,我的点点滴滴!! 当然以下内容都可以通过设置样式来达到目的,但是下面不使用这样的方法 先来看张图,理解此图基本就能实现上面所要达到的目的了 Widget::Widget(QWidge ...