AJAX无刷新下拉框联动

AJAX无刷新下拉框联动的简单示例,分别使用了AJAX组件和xmlHttp异步刷新两种方式。

前台代码:

 

<% @ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm8.aspx.cs" Inherits="WebApplication1.WebForm8"
    ValidateRequest
="false" EnableEventValidation="false" 
%>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > AJAX无刷新下拉框联动 </ title >

    
< script  language ="JavaScript" >
             
/*作者: WhirlWind(20080424)*/
             
                
//以XML获取下拉框4的数据
                var xmlHttp;
                
function XmlPost(obj)
                
{
                  
var svalue = obj.value;
                  
var webFileUrl = "?d3=" + svalue;
                  
//var result = "";
                  // xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
                   if (window.ActiveXObject)//创建对象
                       {
                       
this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                       }

                        
else
                     
{
                      
this.xmlHttp = new XMLHttpRequest();
                      }

                   
//将对象状态与事件相关联
                    xmlHttp.onreadystatechange=statechange;
                  xmlHttp.open(
"POST", webFileUrl, false);
                  xmlHttp.send(
"");
                  
//result = xmlHttp.responseText;
                  
                 
                }

                 
function statechange()
                 
{
                
//判断异步调用是否已经完成
                if(xmlHttp.readystate==4)
                
{
                    
//判断完成的提示代码是否是OK状态
                 if(xmlHttp.status==200)
                 

                 
//将返回数据作为参数,传递给填充方法
                   FillData(xmlHttp.responseText);
                  }

                 }

                 
else
                 
{
                         
var drr4=document.getElementById("<%=DropDownList4.ClientID %>");//服务器控件
                        var select1 = document.getElementById("Select1"); //HTML控件                                                                     
                       for (i = select1.length; i >= 0; i--)                                                                    
                      
{                                                                                                          
                        select1.remove(i); 
//清空
                        drr4.remove(i);                                                                            
                        }

                      
// alert("出现错误!");
                    }

               }

                 
function FillData(result)
                  
{
                     
                      
var drr4=document.getElementById("<%=DropDownList4.ClientID %>");//服务器控件
                        var select1 = document.getElementById("Select1"); //HTML控件                                                                     
                       for (i = select1.length; i >= 0; i--)                                                                    
                      
{                                                                                                          
                        select1.remove(i); 
//清空
                        drr4.remove(i);                                                                            
                        }

                     
if(result != "")
                   
{                                                                                                                                
                    
var piArray = result.split(",");//加载联动数据
                    for(var i=0;i<piArray.length;i++)
                    
{

                     
                      
var newOption = document.createElement("OPTION");                                                    
                            newOption.text
=piArray[i].toString() ;                                    
                            newOption.value
=piArray[i].toString();                                 
                            select1.options.add(newOption);     
                            
                            
var newOption1 = document.createElement("OPTION");              
                            newOption1.text
=piArray[i].toString() ;                                    
                            newOption1.value
=piArray[i].toString(); 
                            drr4.options.add(newOption1);
                                          
                    }

                  }

                  
else
                  
{
                    alert(
"返回的是空值!");
                  }

                  }

           
    
</ script >

    
< style  type ="text/css" >
        #Select1
        
{
            width
: 36px;
        
}

        .style1
        
{
            color
: #FF0000;
        
}

    
</ style >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< asp:ScriptManager  ID ="ScriptManager1"  runat ="server" >
    
</ asp:ScriptManager >
    
< div >
        
< span  class ="style1" > AJAX刷新: </ span >< br  />
        下拉框1:
</ div >
    
< asp:DropDownList  ID ="DropDownList1"  runat ="server"  AutoPostBack ="True"  OnSelectedIndexChanged ="DropDownList1_SelectedIndexChanged" >
    
</ asp:DropDownList >
    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    
< br  />
    下拉框2:
    
< asp:UpdatePanel  ID ="UpdatePanel1"  runat ="server" >
        
< ContentTemplate >
            
< asp:DropDownList  ID ="DropDownList2"  runat ="server" >
            
</ asp:DropDownList >
        
</ ContentTemplate >
    
</ asp:UpdatePanel >
    
< p >
        
&nbsp; </ p >
    
< class ="style1" >
        异步刷新:
</ p >
    
< p >
        下拉框3:
</ p >
    
< p >
        
< asp:DropDownList  ID ="DropDownList3"  runat ="server" >
        
</ asp:DropDownList >
    
</ p >
    
< p >
        下拉框4:
</ p >
    
< p >
        
< asp:DropDownList  ID ="DropDownList4"  runat ="server" >
        
</ asp:DropDownList >
        服务器控件
</ p >
    
< p >
        
< select  id ="Select1"  name ="D1" >
            
< option ></ option >
        
</ select > HTML控件 </ p >
    
< p >
        
&nbsp; </ p >
    
</ form >
</ body >
</ html >

 

后台代码:

 

using  System;
using  System.Collections;
using  System.Configuration;
using  System.Data;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;
using  System.Data.SqlClient;

namespace  WebApplication1
{
    
public partial class WebForm8 : System.Web.UI.Page
    
{
           
/*作者: WhirlWind(20080424)*/
    
        
//public string d1str = string.Empty;//下拉框字符串,以","分隔
        protected void Page_Load(object sender, EventArgs e)
        
{
            
string connstr = ConfigurationManager.ConnectionStrings["TestConnectionString"].ToString();//连接字符串
            if (!IsPostBack)
            
{
                drrlist1bind();
                drrlist2bind();
                drrlist3bind();

                
//DropDownList4.Items.Add(new ListItem("1", "1"));

            }


            
this.DropDownList3.Attributes.Add("onchange""XmlPost(this);");//添加事件属性
            drr4bind();//异步绑定
        }

        
//通过异步刷新绑定下拉框4
        private void drr4bind()
        
{
            
if (Request.QueryString["d3"!= null)
            
{
                
string s1 = Request.QueryString["d3"];
                SqlDataReader drr 
= SqlHelper.ExecuteReader(CommandType.Text, "select b from table_1 where c='" + s1 + "'"null);
                
string d1str = "";
                
while (drr.Read())
                
{
                    d1str 
+= "," + drr[0];
                }

                d1str 
= d1str.Substring(1);
                Response.Write(d1str);
                Response.End();


            }

        }

  
绑定下拉框
        
//选择事件
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        
{
            
string s1 = DropDownList1.SelectedValue;
            SqlDataReader dr 
= SqlHelper.ExecuteReader(CommandType.Text, "select b from table_1 where c='" + s1 + "'"null);
            DropDownList2.DataSource 
= dr;
            DropDownList2.DataTextField 
= "b";
            DropDownList2.DataValueField 
= "b";
            DropDownList2.DataBind();
            dr.Close();
        }

    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 下拉框三级联动是一种常见的前端交互方式,可以通过AJAX实现。具体实现步骤如下: 1. HTML布局:使用select标签实现三个下拉框 ```html <select id="province"> <option value="">请选择省份</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> ``` 2. JavaScript代码:使用jQuery库实现AJAX请求和DOM操作 ```javascript $(function(){ // 获取省份列表 $.ajax({ url: 'province.php', type: 'get', dataType: 'json', success: function(data){ // 遍历省份列表,添加到下拉框中 $.each(data, function(index, item){ $('#province').append('<option value="' + item.id + '">' + item.name + '</option>'); }); } }); // 省份下拉框改变事件 $('#province').change(function(){ var provinceId = $(this).val(); if(provinceId){ // 获取城市列表 $.ajax({ url: 'city.php', type: 'get', data: {provinceId: provinceId}, dataType: 'json', success: function(data){ // 清空城市和区县下拉框 $('#city').empty().append('<option value="">请选择城市</option>'); $('#district').empty().append('<option value="">请选择区县</option>'); // 遍历城市列表,添加到下拉框中 $.each(data, function(index, item){ $('#city').append('<option value="' + item.id + '">' + item.name + '</option>'); }); } }); }else{ // 清空城市和区县下拉框 $('#city').empty().append('<option value="">请选择城市</option>'); $('#district').empty().append('<option value="">请选择区县</option>'); } }); // 城市下拉框改变事件 $('#city').change(function(){ var cityId = $(this).val(); if(cityId){ // 获取区县列表 $.ajax({ url: 'district.php', type: 'get', data: {cityId: cityId}, dataType: 'json', success: function(data){ // 清空区县下拉框 $('#district').empty().append('<option value="">请选择区县</option>'); // 遍历区县列表,添加到下拉框中 $.each(data, function(index, item){ $('#district').append('<option value="' + item.id + '">' + item.name + '</option>'); }); } }); }else{ // 清空区县下拉框 $('#district').empty().append('<option value="">请选择区县</option>'); } }); }); ``` 3. 服务器端代码:根据省份和城市的ID获取对应的城市和区县列表,返回JSON格式数据 省份列表查询代码(省份表结构:id、name): ```php <?php // 连接数据库 $conn = mysqli_connect('localhost', 'root', '123456', 'test'); mysqli_set_charset($conn, 'utf8'); // 查询省份列表 $sql = 'select id, name from province'; $result = mysqli_query($conn, $sql); $data = array(); while($row = mysqli_fetch_assoc($result)){ $data[] = $row; } // 返回JSON格式数据 header('Content-Type: application/json; charset=utf-8'); echo json_encode($data); mysqli_close($conn); ?> ``` 城市列表查询代码(城市表结构:id、name、province_id): ```php <?php // 连接数据库 $conn = mysqli_connect('localhost', 'root', '123456', 'test'); mysqli_set_charset($conn, 'utf8'); // 获取省份ID $provinceId = $_GET['provinceId']; // 查询城市列表 $sql = 'select id, name from city where province_id = ' . $provinceId; $result = mysqli_query($conn, $sql); $data = array(); while($row = mysqli_fetch_assoc($result)){ $data[] = $row; } // 返回JSON格式数据 header('Content-Type: application/json; charset=utf-8'); echo json_encode($data); mysqli_close($conn); ?> ``` 区县列表查询代码(区县表结构:id、name、city_id): ```php <?php // 连接数据库 $conn = mysqli_connect('localhost', 'root', '123456', 'test'); mysqli_set_charset($conn, 'utf8'); // 获取城市ID $cityId = $_GET['cityId']; // 查询区县列表 $sql = 'select id, name from district where city_id = ' . $cityId; $result = mysqli_query($conn, $sql); $data = array(); while($row = mysqli_fetch_assoc($result)){ $data[] = $row; } // 返回JSON格式数据 header('Content-Type: application/json; charset=utf-8'); echo json_encode($data); mysqli_close($conn); ?> ``` 以上代码仅供参考,具体实现需要根据实际情况进行调整。 ### 回答2: Ajax实现下拉框三级联动的主要步骤如下: 1. 配置HTML页面:在HTML页面中创建三个下拉框的元素,并分别设置一个id,用于后续的JavaScript操作。 2. 编写JavaScript代码:使用JavaScript监听第一个下拉框的改变事件。当第一个下拉框选中的选项发生改变时,触发事件处理程序。 3. 使用Ajax发送异步请求:在事件处理程序中,使用Ajax发送异步请求到服务器,以获取与第一个下拉框选中选项相关联的第二个下拉框选项。 4. 服务器端处理请求:服务器端根据第一个下拉框选中的选项,查询数据库或者调用API,获取与之相关联的第二个下拉框选项,并将数据以JSON格式返回给前端。 5. 更新第二个下拉框选项:前端接收到服务器返回的数据后,使用JavaScript动态添加或替换第二个下拉框的选项。 6. 同样地,在第二个下拉框的改变事件中,触发事件处理程序,并通过Ajax发送异步请求获取与第二个下拉框选中选项相关联的第三个下拉框选项。 7. 更新第三个下拉框选项:前端接收到服务器返回的数据后,使用JavaScript动态添加或替换第三个下拉框的选项。 通过以上步骤,就可以实现下拉框的三级联动效果。需要注意的是,要正确处理在选择某个下拉框选项时,下级下拉框的选项需要相应改变。另外,在发送Ajax请求时需要考虑兼容性和请求的性能,可以使用jQuery等库来简化代码,并提高发送请求的效率。 ### 回答3: Ajax实现下拉框三级联动的原理是通过前端页面的JavaScript代码和后端服务器之间的异步请求来实现数据的动态加载和更新。 首先,我们需要创建三个下拉框元素,分别用于显示一级、二级和三级的选项。通过监听一级下拉框的变化事件,我们可以在JavaScript代码中获取到用户选择的一级选项的值。 接下来,我们需要使用Ajax技术向后端服务器发送异步请求,获取对应一级选项的二级选项数据。通过Ajax发送GET或POST请求,并将一级选项的值作为参数传递给后端服务器服务器根据参数的值查询数据库或其他数据源,返回对应的二级选项数据。 当从服务器端获取到二级选项数据后,我们可以使用JavaScript动态地更新二级下拉框的选项。此时,我们同样需要监听二级下拉框的变化事件,以获取用户选择的二级选项的值。 然后,我们再次使用Ajax技术向后端服务器发送异步请求,获取对应二级选项的三级选项数据。服务器根据二级选项的值查询数据库或其他数据源,返回对应的三级选项数据。 当从服务器端获取到三级选项数据后,我们可以使用JavaScript动态地更新三级下拉框的选项。 通过以上操作,我们就可以实现下拉框的三级联动效果。用户选择一级选项后,二级选项会根据一级选项的值进行动态更新;用户选择二级选项后,三级选项会根据二级选项的值进行动态更新。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值