1.直接上JavaScript:
<script type="text/javascript">
var req;
function changeCategory() ...{
var id = document.form2.category1.options[document.form2.category1.selectedIndex];
var url = "getsecondcategories_2.jsp?id=" + escape(id.value);

if(window.XMLHttpRequest) ...{
req = new XMLHttpRequest();
} else if (window.ActiveXObject) ...{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}

function callback() ...{
if(req.readyState == 4) ...{
if(req.status == 200) ...{
eval(req.responseText);
}
}
}
</script>
2.getsecondcategories_2.jsp:(返回字符串形式的JavaScript代码,由客户端调用eval来执行)

<%...@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%...@ page import="com.ycringfinger.shopping.*" %>
<%...
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
request.setCharacterEncoding("GB18030");
int id = Integer.parseInt(request.getParameter("id"));
Category category = Category.loadById(id);
List<Category> categories = category.getChilds();
StringBuffer buf = new StringBuffer();
if(categories.size() == 0) {
buf.insert(0, "document.form2.category2.options[0].value = '-1'; ");
buf.insert(0, "document.form2.category2.options[0].text = '二级子目录'; ");
buf.insert(0, "document.form2.category2.selectedIndex = 0; ");
buf.insert(0, "document.form2.category2.length = 1; ");
} else {
for(int i=0; i<categories.size(); i++) {
Category c = categories.get(i);
buf.append("document.form2.category2.options[" + (i+1) + "].text = '" + c.getName() + "'; ");
buf.append("document.form2.category2.options[" + (i+1) + "].value = '" + c.getId() + "'; ");
}
buf.insert(0, "document.form2.category2.options[0].value = '-1'; ");
buf.insert(0, "document.form2.category2.options[0].text = '二级子目录'; ");
buf.insert(0, "document.form2.category2.selectedIndex = 0; ");
buf.insert(0, "document.form2.category2.length = " + (categories.size()+1) + "; ");
}
response.getWriter().write(buf.toString());
%>
本文介绍了一种使用JavaScript实现的动态加载二级下拉菜单的方法。通过AJAX技术从服务器请求数据,并利用eval执行返回的JavaScript代码片段更新页面上的选项。适用于需要实时更新分类选项的应用场景。
738

被折叠的 条评论
为什么被折叠?



