谁能解释一下这段代码?

egfly 2003-07-25 10:22:02
一、初始化工作:
1.一个封装了数据查询的JavaBean(当前为SqlDispose)
2.数据库的结构(及数据)如下:
id name spec model place
----------- ---------- ---------- ---------- ----------
1 电脑 IBM 台式机 1#
2 电脑 IBM 笔记本 1#
3 电脑 IBM 服务器 1#
4 电脑 联想 台式机 1#
5 电脑 联想 笔记本 1#
6 电脑 联想 服务器 1#
7 电脑 宏基 平板电脑 1#
8 机械 小松 挖掘机 1#
9 电脑 IBM 台式机 2#
当然,如上的数据库结构可以改成一对多关系的多个关(仅需要修改部分内容)。

二、两个关键文件(changeSelect.js,xml.jsp)
//changeSelect.js

/*--得到远程数据--*/
var oReq;
x = new ActiveXObject("Microsoft.XMLDOM");
function getRemoteData(field1,field2,option)
{
var strA = "";
oReq = new ActiveXObject("Microsoft.XMLHTTP");
oReq.open("POST","xml.jsp?field1="+field1+"&field2="+field2+option,false);
oReq.setRequestHeader("Content-Length",strA.length);
oReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
oReq.send(strA);
}

/*--重画下拉框--*/
function changeSelect(select,source,target,option)
{
getRemoteData(target,option,"&"+source+"="+select.options[select.selectedIndex].value);
clearSelect(eval("form1."+target));
fillSelect(eval("form1."+target));
}

/*--清空下拉框--*/
function clearSelect(select)
{
select.options.length = 0;
select.options[select.options.length]= new Option("--请选择--","");
}

/*--填充下拉框--*/
function fillSelect(select)
{
x.loadXML(oReq.responseText);
n=x.selectNodes("/root/id");
if(n!=null)
{
for(i=0;i<n.length;i++)
{
select.options[select.options.length]=new Option(n(i).text,n(i).text);
}
}
}





//xml.jsp
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html;charset=GBK"%>
<jsp:useBean id="operate" scope="page" class="SqlDispose"/>


<root>
<%
ResultSet rs;
String sql;
String temp;
String field1,field2;
field1 = request.getParameter("field1");
field2 = request.getParameter("field2");

temp = new String(request.getParameter(field2).getBytes("ISO8859-1"),"GBK");
sql = "select "+field1+" from product where "+field2+"='"+temp+"' group by "+field1;
rs = operate.rs(sql);
while(rs.next())
{
out.println("<id>"+rs.getString(1)+"</id>");
}
%>

</root>



三、演示文件(demo.jsp)
<%@ page import="java.sql.*" contentType="text/html;charset=GBK"%>
<jsp:useBean id="operate" scope="page" class="SqlDispose"/>

<head>
<script language="JavaScript" src="changeSelect.js"></script>
</head>
<form name="form1">
<select name="name" onchange="clearSelect(form1.model),clearSelect(form1.place),changeSelect(this,'name','spec','name')">
<option>--请选择--</option>

<%
ResultSet rs;
rs = operate.rs("select name from product group by name");
while(rs.next())
{
out.print("<option value=");
out.print(rs.getString("name")+">");
out.print(rs.getString("name"));
out.println("</option>");
}
%>
</select>
<select name="spec" onchange="clearSelect(form1.place),changeSelect(this,'spec','model','spec')"></select>
<select name="model" onchange=changeSelect(this,"model","place","model")></select>
<select name="place"></select>
</form>

主要是
/*--得到远程数据--*/
var oReq;
x = new ActiveXObject("Microsoft.XMLDOM");
function getRemoteData(field1,field2,option)
{
var strA = "";
oReq = new ActiveXObject("Microsoft.XMLHTTP");
oReq.open("POST","xml.jsp?field1="+field1+"&field2="+field2+option,false);
oReq.setRequestHeader("Content-Length",strA.length);
oReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
oReq.send(strA);
}
这一段。
...全文
19 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
egfly 2003-08-10
  • 打赏
  • 举报
回复
结束了
egfly 2003-07-25
  • 打赏
  • 举报
回复
主要是
/*--得到远程数据--*/
var oReq;
x = new ActiveXObject("Microsoft.XMLDOM");
function getRemoteData(field1,field2,option)
{
var strA = "";
oReq = new ActiveXObject("Microsoft.XMLHTTP");
oReq.open("POST","xml.jsp?field1="+field1+"&field2="+field2+option,false);
oReq.setRequestHeader("Content-Length",strA.length);
oReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
oReq.send(strA);
}
这一段。看不懂?
ejbcreate 2003-07-25
  • 打赏
  • 举报
回复
//xml.jsp
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html;charset=GBK"%>
<jsp:useBean id="operate" scope="page" class="SqlDispose"/>


<root>
<%
//这段是对数据库的操作,在此不多说。
ResultSet rs;
String sql;
String temp;
String field1,field2;
field1 = request.getParameter("field1");
field2 = request.getParameter("field2");

temp = new String(request.getParameter(field2).getBytes("ISO8859-1"),"GBK");
sql = "select "+field1+" from product where "+field2+"='"+temp+"' group by "+field1;
rs = operate.rs(sql);
while(rs.next())
{
out.println("<id>"+rs.getString(1)+"</id>");
}
%>

</root>

/*以上这段主要是生成一个格式如:
<root><id>1</id><id>2</id><id>3</id><id>4</id>...</root>的字符串,然后返回给客户端。
其实这段值就是oReq.responseText的值;
用alert(oReq.responseText);就可以看到了。
x.loadXML(oReq.responseText);
*/


哎呀,13点多了,得午休了。写得比较乱,不好意思。 :-)
ejbcreate 2003-07-25
  • 打赏
  • 举报
回复
/*--重画下拉框--*/
function changeSelect(select,source,target,option)
{
getRemoteData(target,option,"&"+source+"="+select.options[select.selectedIndex].value);
clearSelect(eval("form1."+target));//eval是js的一个方法,返回一个值(form1.+变量target的值)
fillSelect(eval("form1."+target));
//调用getRemotData,clearSelect,fillSelect方法;
}

/*--清空下拉框--*/
function clearSelect(select)
{
select.options.length = 0;//删去指定select对象里的options选项
select.options[select.options.length]= new Option("--请选择--","");//创建一个option对象。
}

/*--填充下拉框--*/
function fillSelect(select)
{
//装载HTTP请求回来的字符串,
x.loadXML(oReq.responseText);
n=x.selectNodes("/root/id");//selectNodes根据"/root/id"返回与之匹配的IXMLDOMNodeList对象
if(n!=null)
{
for(i=0;i<n.length;i++)
{
//在指定的select对象里创建options对象,
//最终结果是生成例如"<option value=xxx>xxx</option>"的html代码。
select.options[select.options.length]=new Option(n(i).text,n(i).text);
}
}
}
ejbcreate 2003-07-25
  • 打赏
  • 举报
回复
/*--得到远程数据--*/
var oReq;
x = new ActiveXObject("Microsoft.XMLDOM");
//创建一个Microsoft.XMLDOM对象,该对象有几个比较常用的方法:
//load(String yourxmlfile)--从指定的位置装载一个xml文档;
//loadXML(String yourxmlstring)--装载一个符合xml格式的字符串;
function getRemoteData(field1,field2,option)
{
var strA = "";
oReq = new ActiveXObject("Microsoft.XMLHTTP");
//创建一个Microsoft.XMLHTTP对象
/*
XMLHTTP是微软的又一项基于XML的数据交换技术,主要用于在服务器与客户端交换XML数据。
该技术源于微软在其XML DOM实现中引入的一个重要对象——XMLHttpRequest(Microsoft.XMLHTTP),
它可以为客户端提供同HTTP服务器通讯的协议支持。
简而言之,它允许你打开一个到服务器上的HTTP连接,然后发送和接受数据,
并且利用Microsoft XML DOM对返回数据进行解析。
*/
oReq.open("POST","xml.jsp?field1="+field1+"&field2="+field2+option,false);
/*
初始化一个MSXL2。XMLHTT请求,并指定请求的方式(post或get,在这里指定是POST方式),URL及是否需要验证信息:
false不需要,true则需要。
*/
oReq.setRequestHeader("Content-Length",strA.length);
oReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//设定请求的头部
oReq.send(strA);
//发送到HTTP请求到服务器端并接收服务器端的响应
}

81,092

社区成员

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

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