ajax无刷新联动DropDownList

本文介绍如何利用Ajax技术实现实时更新的省市区联动下拉框功能,并通过后台获取数据来设置选中项。文章详细展示了JavaScript前端代码与后台数据交互的过程。

没接触过ajax,又苦与项目中经常遇到联动的情况,看了小山的例子,发现一不小心爱上ajax了http://www.cnblogs.com/singlepine/archive/2005/10/19/257954.aspx
修改了下小山的程序,支持了后台读取数据设定 DropDownList的selected值。
TextBox17用来读取省id,TextBox18用来读取城市id,TextBox19用来读取注册时的城市id。

由于ajax还是需要从服务器得到数据,所以不能用function selected()
   
{
    cityResult();
     
var DDLid=document.getElementById("Useraction1_DropDownList2");
    
var TBox=document.getElementById("Useraction1_Textbox19");
    DDLid.value
=TBox.value;
    getData();
   }

 的形式,,而需要设定一定的延时,window.setTimeout(
" selected_getdata() " , 500 );       


// 城市------------------------------
function  cityResult() 
            

                
var city=document.getElementById("Useraction1_DropDownList1");
                liandong.GetCityList(city.value,get_city_Result_CallBack);
            }

 
function  selected()
   
{
    cityResult();
    window.setTimeout(
"selected_getdata()",500);       
   }

   
   
function  selected_getdata()
   
{
    
var DDLid=document.getElementById("Useraction1_DropDownList2");
    
var TBox=document.getElementById("Useraction1_Textbox19");
    DDLid.value
=TBox.value;
    getData();
   }

            
function  get_city_Result_CallBack(response)
            
{
                
if (response.value != null)
                
{                    
                    
//debugger;
                    document.all("Useraction1_DropDownList2").length=0;                
                
var ds = response.value;
                    
if(ds != null && typeof(ds) == "object" && ds.Tables != null)
                    
{                    
                         
var DDLid=document.all("Useraction1_DropDownList2");
                   
for(var i=0; i<ds.Tables[0].Rows.length; i++)
                    
{
                        
var name=ds.Tables[0].Rows[i].shiname;
                      
var id=ds.Tables[0].Rows[i].shiid;
                      DDLid.options.add(
new Option(name,id));                     
                   }

                  getData();          
                }

                }
                
                
return
            }

         
            
function  getData()
            
{
                
var province=document.getElementById("Useraction1_DropDownList1");
                
var pindex = province.selectedIndex;
                
var pValue = province.options[pindex].value;
               
// var pText  = province.options[pindex].text;
                
               
var city=document.getElementById("Useraction1_DropDownList2");
               
var txt1=document.getElementById("Useraction1_TextBox17"); 
               
var txt2=document.getElementById("Useraction1_TextBox18");
      
if(city.length>0)
               
{
     
var cindex = city.selectedIndex;
     
var cValue = city.options[cindex].value;
     
//var cText  = city.options[cindex].text;
                                
     txt1.value
=pValue;     
     txt2.value
=cValue;
    
      }

      
else
      
{
     txt1.value
=pValue;
     txt2.value
=0;
        
      }

}


< tr >
         
< td  style ="WIDTH: 108px"  align ="right"  width ="108"  bgColor ="#ffffff" >< asp:textbox  id ="TextBox17"  runat ="server"  Width ="0px" ></ asp:textbox >< asp:textbox  id ="TextBox18"  runat ="server"  Width ="0px" ></ asp:textbox >< asp:textbox  id ="Textbox19"  runat ="server"  Width ="0px" ></ asp:textbox ></ td >
         
< td  bgColor ="#ffffff"  colSpan ="2" > 省: < asp:dropdownlist  id ="DropDownList1"  runat ="server" ></ asp:dropdownlist > 市: < asp:dropdownlist  id ="DropDownList2"  runat ="server" ></ asp:dropdownlist ></ td >
        
</ tr >

 

后台:

Textbox19.Text 
=  reader.Item( 1 )
Response.Write(
" <script for=window event=onload>selected();</ "   &   " script> " )

 

 liandong.vb

Public   Class liandong
    
Public Function GetProvinceList() As DataSet
        
Dim sql As String
        sql 
= "select shengid,shengname from sheng order by shengorder"
        
Return GetDataSet(sql)
    
End Function


    
Public Function GetDataSet(ByVal sql As StringAs DataSet
        
Dim myDataAdapter As SqlClient.SqlDataAdapter
        myDataAdapter 
= New SqlClient.SqlDataAdapter(sql, getdata.myconn)
        
Dim myDataSet As DataSet
        myDataSet 
= New DataSet
        myDataAdapter.Fill(myDataSet)
        
Return myDataSet
    
End Function



    
'Ajax  Start
    'Get the name of city

    
<Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)> _
    
Public Function GetCityList(ByVal shengid As IntegerAs DataSet
        
Dim sql As String
        sql 
= "select shiid,shiname from shi where shengid=" & shengid & "order by shiorder"
        
Return GetDataSet(sql)
    
End Function


End Class


 

另:Ajax实现调用后台方法
首先把Ajax.dll文件复制到项目所在文件夹下的bin下,然后在VS项目的引用添加Ajax.dll文件。
 
其次在Web.Config文件中的<system.web>里添加如下代码:
 <httpHandlers>
   <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
 </httpHandlers>
其中Ajax是指刚才引用的dll文件。
 
新建一个AjaxMethod类,添加方法的方式如下:
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
 public  DataSet GetCityList()
 {
   //TODO:Add Your Codes here
 }
 
接着在所建页面的cs文件(如WebForm1.aspx.cs)中的Page_load()中添加如下代码即可在页面调用后台方法:
Utility.RegisterTypeForAjax(typeof(AjaxTest.AjaxMethod));
对于AjaxTest.AjaxMethod,AjaxTest为命名空间,AjaxMethod为AjaxTest下的类。
 
在前台我们就可以用以下方式调用后台的方法了:
AjaxMethod.GetCityList(value,get_city_Result_CallBack);
function get_city_Result_CallBack(response){}
第一行中的value为要传到后台的值,get_city_Result_CallBack为前台的一个方法函数。
执行完第一句之后就转到执行第二句,response为后台返回前台的值,这个值不一定是一个数,此例中它是一个DataSet。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值