JAVA EE 项目常用知识 之AJAX技术实现select下拉列表联动的两种用法(让你真正理解ajax)

JAVA EE 项目常用知识 之AJAX技术实现select下拉列表联动的两种用法(让你真正理解ajax)

标签: Javaajaxxmlhttprequest
10469人阅读 评论(6) 收藏 举报
本文章已收录于:
分类:

ajax 下拉列表联动的用法。

ajax的定义:

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


ajax效果的一个例子:

区域为空的时候,维护人情况:

选了一个区域后的情况:(选 舒城县 联带出来的维护人员 小刘)




一、原生态的js实现

XMLHttpRequest 是 AJAX 的基础

XMLHttpRequest 对象

所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

[javascript] view plain copy
print ?
  1. var xmlHttp;  
  2.   
  3. function createXMLHttpRequest(){  
  4. if(window.ActiveXObject){//检查浏览器是否支持 XMLHttpRequest 对象  
  5. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//不支持 创建  
  6. }  
  7. else if(window.XMLHttpRequest){  
  8. xmlHttp = new XMLHttpRequest();//支持 直接new  
  9. }  
  10. }//创建一个xmlHttp 对象  
  11. function ajaxRequest(url,data,responseResult){//ajaxRequest是将请求发送到后台的function  
  12. createXMLHttpRequest();//调用 创建一个XMLHttpRequest对象  
  13. xmlHttp.open("POST",url,true);//规定请求的类型(post)、URL 以及是否异步处理请求(是)  
  14. xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//类似HTML 表单那样 POST 数据 的http头  
  15. xmlHttp.onreadystatechange = responseResult;//规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数  
  16. xmlHttp.send(data);//发送数据  
  17.   
  18. }  
var xmlHttp;

function createXMLHttpRequest(){
if(window.ActiveXObject){//检查浏览器是否支持 XMLHttpRequest 对象
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//不支持 创建
}
else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();//支持 直接new
}
}//创建一个xmlHttp 对象
function ajaxRequest(url,data,responseResult){//ajaxRequest是将请求发送到后台的function
createXMLHttpRequest();//调用 创建一个XMLHttpRequest对象
xmlHttp.open("POST",url,true);//规定请求的类型(post)、URL 以及是否异步处理请求(是)
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//类似HTML 表单那样 POST 数据 的http头
xmlHttp.onreadystatechange = responseResult;//规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数
xmlHttp.send(data);//发送数据

}

//前台页面的区域select代码:

  1. </td>  
  2.                          <th>区域:</th>  
  3.                      <td>  
  4.                      <select style="width: 152px" name="areaId"  id="areaId"  class="select_field" οnchange="getWhmans(this.value)">  
  5.                         <option value=""  style="color:#999999">-请选择-</option>  
  6.                         <c:forEach items="${arealist}" var="area" >  
  7.                          <option value="${area.id}">${area.areaName}</option>  
  8.                         </c:forEach>  
  9.                     </select><font color="red">*</font>  
  10.                      </td>  
</td>
                         <th>区域:</th>
                     <td>
                     <select style="width: 152px" name="areaId"  id="areaId"  class="select_field" οnchange="getWhmans(this.value)">
                        <option value=""  style="color:#999999">-请选择-</option>
                        <c:forEach items="${arealist}" var="area" >
                         <option value="${area.id}">${area.areaName}</option>
                        </c:forEach>
                    </select><font color="red">*</font>
                     </td>



//前台维护人select页面代码:

  1. <th>维护人员:</th>  
  2.                     <td>  
  3.                           
  4.                         <select  id="whman" style="width: 152px" class="select_field" name="whman" >  
  5.                             <option value="" style="color:#999999">请选择</option>  
  6.                               
  7.                         </select><font color="red">*</font>  
  8.                           
  9.                     </td>  
<th>维护人员:</th>
	 				<td>
	 					
	 					<select  id="whman" style="width: 152px" class="select_field" name="whman" >
	 						<option value="" style="color:#999999">请选择</option>
	  	 					
	  	 				</select><font color="red">*</font>
	 					
	 				</td>


//以下是后台的部分代码

  1. List<Whperson> customers = factoryBO.getFugBO().getWhperson(area);//根据区域来得到该区域下的维护人信息 即选一个下拉框的区域后联动另一个下拉框带出该区域的维护人信息  
  2.         if (customers != null) {  
  3.             JSONArray jsonArray = new JSONArray();//new一个json数组  
  4.             for (Whperson whman : customers) {  
  5.                 JSONObject obj = new JSONObject();  
  6.                 obj.put("id", whman.getId());  
  7.                 obj.put("name", whman.getName());  
  8.                 jsonArray.add(obj);//循环new jsonObject 并把维护人信息 put进去 再add到josnArray里去  
  9.              }  
  10.             out.write(jsonArray.toString());//输出写到页面 即下面的responseText里面  
  11.         } else {  
  12.             out.write("null");  
  13.         }  
  14.         out.flush();  
  15.         out.close();  
List<Whperson> customers = factoryBO.getFugBO().getWhperson(area);//根据区域来得到该区域下的维护人信息 即选一个下拉框的区域后联动另一个下拉框带出该区域的维护人信息
        if (customers != null) {
            JSONArray jsonArray = new JSONArray();//new一个json数组
            for (Whperson whman : customers) {
                JSONObject obj = new JSONObject();
                obj.put("id", whman.getId());
                obj.put("name", whman.getName());
                jsonArray.add(obj);//循环new jsonObject 并把维护人信息 put进去 再add到josnArray里去
             }
            out.write(jsonArray.toString());//输出写到页面 即下面的responseText里面
        } else {
            out.write("null");
        }
        out.flush();
        out.close();

[javascript] view plain copy
print ?
  1. function responseCustomer(){//后台响应完成后执行的function  
  2. if(xmlHttp.readyState == 4){//4表示请求已完成 ,响应已就绪  
  3. if(xmlHttp.status == 200){//表示ok  
  4. var message=xmlHttp.responseText;//为后台返回过来的文本  
  5. if(message=="null"){//若没有返回任何信息  
  6. document.getElementById("id").options.length=1;//把id='id'的option下拉框置空  
  7. return false;  
  8. }  
  9. var info2 = eval(message);  //解析一下json字符串  
  10. document.getElementById("whman").options.length=1;把id='id'的option下拉框先置空  
  11. $.each(info2, function(i,n){  
  12. document.getElementById("whman").options.add(new Option(n.gridName,n.gridId));//给下拉框option加上后台返回的值 即增加下拉框选项  
  13. });  
  14. }  
  15. }  
  16. }  
  17. function getGridByAreaId(val){//自己写的函数 另一个option onchange事件触发的函数,目的是选这个option后 想要的option能级联  
  18. var url="village.do?method=getGridByAreaId";//请求后台的url  
  19. var data="id="+val.value;//传入后台的参数  
  20. ajaxRequest(url,data,responseCustomer);//实质要调用的ajax的函数  
  21.   
  22. }  
function responseCustomer(){//后台响应完成后执行的function
if(xmlHttp.readyState == 4){//4表示请求已完成 ,响应已就绪
if(xmlHttp.status == 200){//表示ok
var message=xmlHttp.responseText;//为后台返回过来的文本
if(message=="null"){//若没有返回任何信息
document.getElementById("id").options.length=1;//把id='id'的option下拉框置空
return false;
}
var info2 = eval(message);  //解析一下json字符串
document.getElementById("whman").options.length=1;把id='id'的option下拉框先置空
$.each(info2, function(i,n){
document.getElementById("whman").options.add(new Option(n.gridName,n.gridId));//给下拉框option加上后台返回的值 即增加下拉框选项
});
}
}
}
function getGridByAreaId(val){//自己写的函数 另一个option onchange事件触发的函数,目的是选这个option后 想要的option能级联
var url="village.do?method=getGridByAreaId";//请求后台的url
var data="id="+val.value;//传入后台的参数
ajaxRequest(url,data,responseCustomer);//实质要调用的ajax的函数

}

二、Jquery ajax的实现


[javascript] view plain copy
print ?
  1. function getWhmans(obj){  
  2. var url="bbtj.do?method=getWhman";//请求后台的url  
  3. $("#whman").empty();//先置空  
  4. $("#whman").append($('<option value="">-请选择-</option>'));//加上--请选择--选项  
  5. if($(obj).val()=="")  
  6. return;//无值,返回  
  7. url+="&areaId="+$(obj).val();//url参数  
  8. url+="&t="+(new Date()).valueOf();//url参数  
  9.   
  10. $.ajax({  
  11. url:url,  
  12. type:'POST',//POST方式  
  13. dataType:'text',//返回text类型  
  14. beforeSend:function(xmlHttpRequest,status){  
  15.     
  16. },  
  17. success:function(data,status){  
  18. var d=eval(data);//解析  
  19. $(d).each(function(index,entity){  
  20. $("#whman").append($('<option value="'+entity['id']+'">'+entity['name']+'</option>'));//后台数据加到下拉框  
  21. });  
  22. },  
  23. complete:function(xmlHttpRequest,status){  
  24.     
  25. },  
  26. error:function(){  
  27.     
  28. }  
  29. });  
  30.   
  31. }  
function getWhmans(obj){
var url="bbtj.do?method=getWhman";//请求后台的url
$("#whman").empty();//先置空
$("#whman").append($('<option value="">-请选择-</option>'));//加上--请选择--选项
if($(obj).val()=="")
return;//无值,返回
url+="&areaId="+$(obj).val();//url参数
url+="&t="+(new Date()).valueOf();//url参数

$.ajax({
url:url,
type:'POST',//POST方式
dataType:'text',//返回text类型
beforeSend:function(xmlHttpRequest,status){
  
},
success:function(data,status){
var d=eval(data);//解析
$(d).each(function(index,entity){
$("#whman").append($('<option value="'+entity['id']+'">'+entity['name']+'</option>'));//后台数据加到下拉框
});
},
complete:function(xmlHttpRequest,status){
  
},
error:function(){
  
}
});

}




 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值