好久时间没有更新内容了,很多朋友对我以前写的一篇《用Ajax实现多级联动下拉列表(无限级别,JSON传输数据,含全国地区数据库)(原创)》感兴趣,提出原来这段代码服务器端是用asp实现的,能不能改写成JSP或者ASP.NET。说实话,对JSP我不是很熟悉,参考了一些资料,没有用struts,直接写成JSP,文后的下载包中包含一个org.json.jar,测试的时候,请将这个包加了应用服务器的lib目录中。至于For ASP.NET的,过几天再写吧。
Ajax.html文件没有太大的变化,只需要将原来的OptionServer.asp改成OptionServer.jsp。
//发送请求,获取下一个列表框的列表数据
//参数oValue为当前列表框的选中值,此值作为下一个列表框的parentID号
function getNextOptions(oValue) {
createRequest();
var url = "OptionServer.jsp?parentid=" + oValue;
request.open("GET", url, true);
request.onreadystatechange = opcallback;
request.send(null);
}
OptionServer.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="org.json.JSONException" %>
<%@ page import="org.json.JSONObject" %>
<%@ page import="org.json.JSONArray" %>
<%
try
{
String spath="options//area.mdb"; //注意由网站根到文件的路径,这是将测试内容放在服务器根下面的options目录下。
String dbpath = application.getRealPath(spath); //转化成物理路径
String dbname = ""; //Acess 数据库用户名,没有则为空
String user = ""; //Acess 数据库密码,没有则为空
//数据库连接字符串
String url ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+dbpath;
//加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立连接
Connection conn= DriverManager.getConnection(url);
//创建语句对象
Statement stmt=conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
// **** 数据库连接代码 结束 *********
String ParentID=request.getParameter("parentid");
String sql;
if(ParentID=="")
sql="select text,code from area where Parentcode is null";
else
sql="select text,code from area where Parentcode='"+ParentID+"'";
ResultSet rs = stmt.executeQuery(sql);
JSONArray jsonOptions = new JSONArray();
while(rs.next())
{
JSONObject json = new JSONObject();
json.put("title",rs.getString("text"));
json.put("value", rs.getString("code"));
jsonOptions.put(json);
}
out.print(jsonOptions.toString());
rs.close(); //关闭记录集对象
stmt.close(); //关闭语句对象
conn.close(); //关闭连接对象
}catch(Exception e){
out.print("数据库连接错误!,错误信息如下:<br>");
out.print(e.getMessage());
}
%>