AJAX调用方式总结(1)

长篇大论来讲述什么是AJAX,怎么使用AJAX,这样我总觉得太理论化了,接受起来会有一定的难度...所以,本篇博客的另一个主旨是:从实例入手,由浅到深。

最近用了近两天的时间对AJAX的知识进行了一个梳理,觉得是时候对AJAX的相关知识点做个总结了.....这当然也就是本篇博客的主旨了....我也不是很赞成用长篇大论来讲述什么是AJAX,怎么使用AJAX,这样我总觉得太理论化了,接受起来会有一定的难度...所以,本篇博客的另一个主旨是:从实例入手,由浅到深.....好了,直接开始入手吧

实例一:省份-城市的联级下拉框 

利用AJAX来获取数据实现联级下拉框,当省份下拉框的选项发生变化时,城市的选项对应变化,效果如图:

我们首先来实现后台,先将数据准备好了在实现前台获取数据,【考虑:当我们页面登录的时候,我们需要获取的数据】: 1).省份框中的省份; 2).因为登录时省份框的第一项选中,所以还需要第一个省份所对应的城市名,好了,需求知道了,代码就好写了,直接贴上后台代码:

 
 
  1. protected void Page_Load(object sender, EventArgs e)  
  2.         {  
  3.             if (Request.QueryString["provid"] != null)  
  4.             {  
  5.                 //首先获取传递过来的参数值  
  6.                 string provId = Request.QueryString["provid"].ToString();  
  7.  
  8.                 //查询所有城市  
  9.                 string sqlprov = "select * from Provice";  
  10.                 SqlDataReader reader = DbHelperSQL.ExecuteReader(sqlprov);  
  11.                 string resultProv = "";  
  12.                 while (reader.Read())  
  13.                 {  
  14.                     string id = reader[0].ToString();  
  15.                     string provName = reader[1].ToString();  
  16.  
  17.                     //字符串拼接,为了前台获取时可以切分获取对应数据,用 '|' 来隔离 各个省份  
  18.                     resultProv += "|" + string.Format("{0},{1}", id, provName);  
  19.                 }  
  20.                 reader.Close();  
  21.  
  22.                 //根据省份框的ID来获取对应的城市名  
  23.                 string sqlcity =string.Format("select * from City where Proid='{0}'",provId);  
  24.                 SqlDataReader readercity = DbHelperSQL.ExecuteReader(sqlcity);  
  25.                 string resultCity = "";  
  26.                 while (readercity.Read())  
  27.                 {  
  28.                     string cityId = readercity[1].ToString();  
  29.                     string cityName = readercity[2].ToString();  
  30.  
  31.                     //同样用字符串拼接 用 '|' 来隔离 同一省份 的各个城市  
  32.                     resultCity += "|" + string.Format("{0},{1}", cityId, cityName);  
  33.                 }  
  34.  
  35.                 //去除第一个 '|' ,并且在最后拼接上 '&' 来区分省份和城市  
  36.                 resultProv = resultProv.Substring(1) + "&";  
  37.  
  38.                 //最后的结果形式为【id,省份名|id2,省份名2|....&id,城市名|id2,城市名2|.....】  
  39.                 string result = resultProv + resultCity.Substring(1);  
  40.  
  41.                 Response.Write(result);  
  42.                 Response.End();  
  43.             }  
  44.         } 

后台代码其实很简单,就是根据传过来的参数从数据库获取对应的数据,但是这里我们把获取到得数据最后都用字符串拼接起来了,而且是有规律的拼接,这是为什么呢?其实在注释上已经讲明了,就是为了方便前台获取对应的数据了,因为我们是使用后台返回文本形式的数据,这就是为什么我们拼接字符串了。。

接下来我们来实现前台,前台主要的任务就是获取后台返回的数据,并实现绑定......也是分块贴上代码

 
 
  1. //实例化XmlHttpRequest对象  
  2.  var xhr = null;  
  3.         function CreateXhr() {  
  4.             if (window.ActiveXObject)   
  5.             {  
  6.                 try 
  7.                 {  
  8.                     xhr = new ActiveXObject("Microsoft.XMLHTTP");  
  9.                 }  
  10.                 catch (e)   
  11.                 {  
  12.                     try 
  13.                     {  
  14.                         xhr = new ActiveXObject("Msxml2.XMLHTTP");  
  15.                     }  
  16.                     catch (e)   
  17.                     {  
  18.                         xhr = null;  
  19.                     }  
  20.                 }  
  21.             }  
  22.             if (window.XMLHttpRequest) {  
  23.                 xhr = new XMLHttpRequest();  
  24.             }  
  25.  
  26.             return xhr;  
  27.         } 

当页面载入时,实现省份框以及第一个省份对应的城市框的绑定,代码:

 
 
  1. //载入绑定省份   
  2.        function getLoadProv() {  
  3.            CreateXhr();  
  4.            xhr.onreadystatechange = WatchState;  
  5.            xhr.open("get""getProvCity.aspx?provid=1&time=" + new Date());  
  6.            xhr.send(null);  
  7.        }  
  8.  
  9.        //监听载入绑定时状态  
  10.        function WatchState() {  
  11.            if (xhr.readyState == 4 && xhr.status == 200) {  
  12.                //1,**|2,**&1,##|2,##  
  13.                var result = xhr.responseText;  
  14.                var provs = result.split('&')[0].split('|');  
  15.                var citys = result.split('&')[1].split('|');  
  16.  
  17.                //省份下拉框清空  
  18.                document.forms[0].prov.length = 0;  
  19.  
  20.                //绑定省份框  
  21.                for (var i = 0; i < provs.length; i++) {  
  22.                    var prov = provs[i].split(',');  
  23.                    //实例化一个选项  
  24.                    var op = new Option();  
  25.                    op.value = prov[0];  
  26.                    op.text = prov[1];  
  27.                    document.forms[0].prov.options.add(op);  
  28.                }  
  29.  
  30.                //城市下拉框清空  
  31.                document.forms[0].city.length = 0;  
  32.  
  33.                //绑定城市框  
  34.                for (var j = 0; j < citys.length; j++) {  
  35.                    var city = citys[j].split(',');  
  36.                    var op = new Option();  
  37.                    op.value = city[0];  
  38.                    op.text = city[1];  
  39.                    document.forms[0].city.options.add(op);  
  40.                }                  
  41.            }  
  42.        } 

当省份框的选项发生变化时实现联级变化,代码:

 
 
  1. //获取城市  
  2. function GetCity() {  
  3.      
  4.     //获取省份框选中的值  
  5.     var provId = document.forms[0].prov.value;  
  6.  
  7.     CreateXhr();  
  8.     xhr.onreadystatechange = UpdateCity;  
  9.     xhr.open("get""getProvCity.aspx?provid=" + provId + "&time=" + new Date());  
  10.     xhr.send(null);  
  11. }  
  12.  
  13. //修改城市下拉框内容  
  14. function UpdateCity() {  
  15.     if (xhr.readyState == 4 && xhr.status == 200) {  
  16.         var result = xhr.responseText;  
  17.         var citys = result.split('&')[1].split('|');  
  18.         //城市下拉框清空  
  19.         document.forms[0].city.length = 0;  
  20.  
  21.         //绑定城市框  
  22.         for (var j = 0; j < citys.length; j++) {  
  23.             var city = citys[j].split(',');  
  24.             var op = new Option();  
  25.             op.value = city[0];  
  26.             op.text = city[1];  
  27.             document.forms[0].city.options.add(op);  
  28.         }                  
  29.     } 

前台html代码:

 
 
  1. html  
  2.  <body> 
  3.      <form id="form1" runat="server"> 
  4.      <div> 
  5.          <select id="prov" onchange="GetCity();"> 
  6.          </select> 
  7.          <select id="city"> 
  8.          </select> 
  9.      </div> 
  10.      </form> 
  11.  </body> 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值