运用Ajax通过select下拉框能得到数据

大伙应该在开发中遇到过这种情况,就是通过下拉框选择要显示的内容。如下图所示:


 

在没用到ajax技术时,我们可以使用两种方法来解决,一种就是选择后再次获得下拉框的数据,和显示的数据一起反映在页面上,这是最笨的方法,因为你选择多少次,下拉框的数据就要从数据库重复读取多少次。另外一种方法就是将页面分两桢,上桢是下拉框,下桢就是要读取的内容。这样做比第一种方法进步了不少,但是分桢对页面控制又有了要求。

使用Ajax正好结合了上面两种方法的优点。

下面就来看看我们是怎样实现的,我的实现平台是Struts+Spring+Hibernate,但与Ajax交道的也就是Struts,至于你后台怎样从数据库取得数据,就要看你的具体实现了:

JSP页面:

 

<% @ page language="java" import="java.util.*,com.wehave.oa.labourset.model.MBm" pageEncoding="gb2312" %>
<% @ taglib uri="struts-html" prefix="html"  %>
<% @ taglib uri="struts-bean" prefix="bean"  %>
<% @ taglib uri="struts-logic" prefix="logic"  %>
< html >
< head >
< title > 借阅信息 </ title >
< link  rel ="stylesheet"  type ="text/css"  href ="../css/table.css" >
< link  href ="../css/style.css"  rel ="stylesheet"  type ="text/css" >  
< script  src ="../css/Alai_tc.js"  language ="JScript" ></ script >  
<!--  html:javascript formName="lendingCartForm"  method="validate"/ -->
< script  Language ="JavaScript" >

function btn_AddFolder() {
    
if(confirm("确定要归还吗?")){
        
//if(document.lendingCartForm.onsubmit()){        
            document.forms[0].submit();
        
//}
    }
  
}


var req;
var dataDiv;
var dataTable;
var dataTableBody;
function Change_Select()
{
    dataTableBody
=document.getElementById("lendingcartDataBody");
    dataTable
=document.getElementById("lendingcartData");
    dataDiv
=document.getElementById("popup");
    
    
var zhi=document.getElementById('tbEngineFilereadId').value;
    
var url="returnBlueprintPage.go?method=getLendingCart&id="+zhi;
    
    
if(zhi=="0"){
        alert(
"请选择您要察看的信息");
                 
return;
    }
else{
        
if(window.XMLHttpRequest)
        
{
            req
=new XMLHttpRequest();
        }
else if(window.ActiveXObject)
        
{
            req
=new ActiveXObject("Microsoft.XMLHTTP");
        }

        
        
if(req)
        
{
            req.open(
"GET",url,true);
            req.onreadystatechange
=callback;
            req.send(
null);
        }

    }

}


function callback()
{
    
if(req.readyState == 4)
    
{
        
if(req.status == 200)
        
{
            
//alert(req.responseText);
            document.getElementById("results").innerHTML=req.responseText;
        }
else{
            alert(
"Not able to retrieve description"+req.statusText);
        }

    }

}


</ script >
</ head >
< body  class ="bodycolor"  topmargin ="0"  leftmargin ="0" >
    
< html:form  action ="/updateLendingcarts"  onsubmit ="return validate(this)" >     
    
< table  width ="100%"  background ="../images/blank.gif"  border ="0"  cellspacing ="0"  cellpadding ="0" >
        
< tr >< td  height ="7"  colspan ="2" ></ td ></ tr >
        
< tr >
            
< td  width ="45%"  height ="23"  align ="left" >< strong > &nbsp;&nbsp;   < img  src ="../images/small/page_tools_bar.gif"  width ="13"  height ="13" >< span  class ="css3 STYLE20" > &nbsp;&nbsp; 借阅信息 </ span ></ strong ></ td >
            
< td  width ="55%"  align ="right" >
            
< img  name ="aa"  src ="../images/xin_gh.gif"  width ="51"  height ="19"  alt =""  align ="absmiddle"   onclick ='btn_AddFolder()'   style ="cursor:hand" > &nbsp;  
            
< img  name ="aa"  src ="../images/xin_gb.gif"  width ="51"  height ="19"  alt =""  align ="absmiddle"   style ="cursor:hand"  onclick ='javascript:window.close()' > &nbsp;  
            
</ td >
        
</ tr >
    
</ table >
    
< table  width ="100%"  border ="1"  cellpadding ="0"  cellspacing ="0"  style ="border-collapse: collapse; border-top-width: 0"  bordercolor ="#426EB4" >
        
< tr >
            
< td  width ="30%"  class ="td1_a" >< span  class ="STYLE1" > 请选择借阅号 </ span ></ td >     
            
< td  width ="70%" >
            
< html:select  property ="tbEngineFilereadId"  onchange ="Change_Select()"  styleClass ="SmallSelect" >
                
< html:option  value ="0" > 请选择 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </ html:option >
                   
< html:options  collection ="idlist"  property ="tbEngineFilereadId"  labelProperty ="tbEngineFilereadId" />
            
</ html:select >
            
</ td >      
        
</ tr >
    
</ table >
     
< div  id ="results" ></ div >
    
< INPUT  TYPE ="hidden"  name ="method"  value ="doUpdateLendingcarts" >  
    
</ html:form >
    
</ body >
</ html >

 页面内容看上去很多,其实关键代码并不多:

首先我们的获得下拉框的数据,并在页面上反映出来:

< html:select  property ="tbEngineFilereadId"  onchange ="Change_Select()"  styleClass ="SmallSelect" >
             
< html:option  value ="0" > 请选择 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </ html:option >
             
< html:options  collection ="idlist"  property ="tbEngineFilereadId"  labelProperty ="tbEngineFilereadId" />
   
</ html:select >

当选择下拉框时,就会触动"Change_Select()"事件:

var  req;
var  dataDiv;
var  dataTable;
var  dataTableBody;
function  Change_Select()
{
    dataTableBody
=document.getElementById("lendingcartDataBody");
    dataTable
=document.getElementById("lendingcartData");
    dataDiv
=document.getElementById("popup");
    
    
var zhi=document.getElementById('tbEngineFilereadId').value;
    
var url="returnBlueprintPage.go?method=getLendingCart&id="+zhi;
    
    
if(zhi=="0"){
        alert(
"请选择您要察看的信息");
                 
return;
    }
else{
        
if(window.XMLHttpRequest)
        
{
            req
=new XMLHttpRequest();
        }
else if(window.ActiveXObject)
        
{
            req
=new ActiveXObject("Microsoft.XMLHTTP");
        }

        
        
if(req)
        
{
            req.open(
"GET",url,true);
            req.onreadystatechange
=callback;
            req.send(
null);
        }

    }

}


function  callback()
{
    
if(req.readyState == 4)
    
{
        
if(req.status == 200)
        
{
            
//alert(req.responseText);
            document.getElementById("results").innerHTML=req.responseText;
        }
else{
            alert(
"Not able to retrieve description"+req.statusText);
        }

    }

}

这个js代码也不难,关键就在于"document.getElementById("results").innerHTML=req.responseText;"
我没有用JS来拼出页面,是考虑到页面的安全性问题,所以我采取了在后台拼出页面的做法。

最后看看action是怎样实现的:

/** 
     * 根据借阅号获得借阅信息 
     
*/

    
public  ActionForward getLendingCart(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest req,
            HttpServletResponse res)
{
        
        String readID
=(String)req.getParameter("id");
        
        TbEngineFileread tef
=lendingCartsService.getLendingCartbyID(readID);
        
        MYhb yhb
=lendingCartsService.getBM(tef.getTbEngineFilereadJyr());
        String jyrname
=yhb.getMYhbXm();
        String jyrbmid
=yhb.getMBm().getMBmBmbh();
        String jyrbmname
=yhb.getMBm().getMBmMc();
    
        MYhb yhb1
=lendingCartsService.getBM(tef.getTbEngineFilereadDjr());
        String djrname
=yhb1.getMYhbXm();
        String djrbmid
=yhb1.getMBm().getMBmBmbh();
        String djrbmname
=yhb1.getMBm().getMBmMc();
        
        String date
=tef.getTbEngineFilereadGetTime().substring(0,11);
        
        String redate
="";
        
if(tef.getTbEngineFilereadEndTime()!=null){
            redate
=tef.getTbEngineFilereadEndTime().substring(0,11);
        }

        
        res.setContentType(
"text/xml;charset=GB2312");
        res.setHeader(
"Cache-Control","no-cache");
        String xml
="";
        xml
+="<table width='100%' border='1' cellpadding='0' cellspacing='0' style='border-collapse: collapse; border-top-width: 0' bordercolor='#426EB4'>";
        xml
+="<tbody>";
        xml
+="<tr>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>档案分类ID</span></td>";
        xml
+="<td width='30%'>"+"<input type='text' name='tbEngineFilereadSortId' class='smallInput' size='15' maxlength='15' value="+tef.getTbEngineFilereadSortId()+" readonly='true'>"+"</td>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>机械设备ID</span></td>";
        xml
+="<td width='30%'>"+"<input type='text' name='tbEngineFilereadEgineId' class='smallInput' size='15' maxlength='15' value="+tef.getTbEngineFilereadEgineId()+" readonly='true'>"+"</td>";
        xml
+="</tr>";
        xml
+="<tr>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>蓝图ID</span></td>";
        xml
+="<td width='30%'>"+"<input type='text' name='tbEngineFilereadBluePrintId' class='smallInput' size='15' maxlength='15' value="+tef.getTbEngineFilereadBluePrintId()+" readonly='true'>"+"</td>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>备注</span></td>";
        xml
+="<td width='30%'>"+"<input type='text' name='tbEngineFilereadMemo' class='smallInput' size='15' maxlength='15' value="+tef.getTbEngineFilereadMemo()+" >"+"</td>";
        xml
+="</tr>";
        xml
+="<tr>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>借阅时间</span></td>";
        xml
+="<td width='30%'>"+"<input type='text' name='tbEngineFilereadGetTime' class='smallInput' size='15' maxlength='15' value="+date+" readonly='true'>"+"</td>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>归还时间</span></td>";
        xml
+="<td width='30%'>";
        xml
+="<input type='text' name='tbEngineFilereadEndTime' class='smallInput' size='15' maxlength='15' value="+redate+">";    
        xml
+="<img src='../js/date/img.gif' id='f_trigger_c' style='cursor: pointer; border: 1px solid red;'  title='Date selector' οnmοuseοver="this.style.background='red';" οnmοuseοut="this.style.background=''" />";    
        xml
+="<script type="text/javascript"> ";
        xml
+="Calendar.setup({ inputField     :    "tbEngineFilereadEndTime",  ifFormat       :    "%Y-%m-%d", button         :    "f_trigger_c",  align          :    "Tl", singleClick    :    "true" });";
        xml
+="</"+"script>";
        xml
+="</td>";
        xml
+="</tr>";
        xml
+="<tr>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>借阅人</span></td>";
        xml
+="<td width='30%'>"+"<input type='hidden' name='tbEngineFilereadJyr' value="+tef.getTbEngineFilereadJyr()+" >";
        xml
+="<input type='text' name='tbEngineFilereadJyrmc' class='smallInput' size='15' maxlength='15' value="+jyrname+" readonly='true'>"+"</td>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>借阅人部门</span></td>";
        xml
+="<td width='30%'>"+"<input type='hidden' name='tbEngineFilereadJyrbm' value="+jyrbmid+" >";
        xml
+="<input type='text' name='tbEngineFilereadJyrbmmc' class='smallInput' size='15' maxlength='15' value="+jyrbmname+" readonly='true'>"+"</td>";
        xml
+="</tr>";
        xml
+="<tr>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>登记人</span></td>";
        xml
+="<td width='30%'>"+"<input type='hidden' name='tbEngineFilereadDjr' value="+tef.getTbEngineFilereadDjr()+" >";
        xml
+="<input type='text' name='tbEngineFilereadDjrmc' class='smallInput' size='15' maxlength='15' value="+djrname+" readonly='true'>"+"</td>";
        xml
+="<td width='20%' class='td1_a'><span class='STYLE1'>登记人部门</span></td>";
        xml
+="<td width='30%'>"+"<input type='hidden' name='tbEngineFilereadDjrbm' value="+djrbmid+" >";
        xml
+="<input type='text' name='tbEngineFilereadDjrbmmc' class='smallInput' size='15' maxlength='15' value="+djrbmname+" readonly='true'>"+"</td>";
        xml
+="</tr>";
        xml
+="</tbody>";
        xml
+="</table>";
        
try {
            res.getWriter().write(xml);
        }
 catch (IOException e) {
            
// TODO 自动生成 catch 块
            e.printStackTrace();
        }

        
return null;
    }

这段代码虽然长,但不难。

至此,从下拉框选取内容的示例就完成了。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在MySQL数据库中创建一个表,记录下框的选项。例如,可以创建一个名为“options”的表,其中包含两列:id和name。id是选项的唯一标识符,name是选项的文本。 其次,在servlet中编写代码来获取选项列表。可以创建一个名为“OptionsServlet”的servlet,该servlet可以使用DAO来从数据库中检索选项列表。在servlet中可以使用以下代码片段: ``` List<Option> options = OptionDAO.getOptions(); //获取选项列表 request.setAttribute("options", options); //将选项列表设置为请求属性 request.getRequestDispatcher("page.jsp").forward(request, response); //转发到JSP页面 ``` 在这里,我们将选项列表设置为请求属性,并将请求转发到JSP页面,以便在页面上显示选项列表。 接下来,在JSP页面中使用ajax和jQuery来加载选项列表。可以在页面上使用<select>标记来创建下框。然后,使用以下代码片段来使用ajax和jQuery填充下框: ``` $.ajax({ url: "OptionsServlet", dataType: "json", success: function(data) { $.each(data, function(index, option) { $("select").append("<option value='" + option.id + "'>" + option.name + "</option>"); }); } }); ``` 在这里,我们使用ajax来获取从servlet返回的JSON数据,然后使用jQuery循环遍历数据并将选项添加到下框中。 最后,需要在servlet中添加一个方法来返回选项列表的JSON表示。可以使用以下代码片段: ``` List<Option> options = OptionDAO.getOptions(); //获取选项列表 String json = new Gson().toJson(options); //将选项列表转换为JSON response.setContentType("application/json"); //设置响应内容类型为JSON response.setCharacterEncoding("UTF-8"); //设置响应字符编码为UTF-8 response.getWriter().write(json); //将JSON数据写入响应 ``` 在这里,我们使用Gson库将选项列表转换为JSON,并将JSON写入响应。最后,需要设置响应内容类型和字符编码。 这样,就可以使用MySQL数据库和ajax来循环选择下框,并连接servlet和DAO。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值