最近老总提了一个小功能,在搜索网吧列表的时候加上网吧所属代理商这个条件,原有的搜索条件是一个地区二级联动,现在需要根据不同的地区显示不同的代理商集合。
即在触发地区下拉框的onchange事件时,代理商的下拉框选项也相应的改变,比如选择地区 湖南—〉长沙,那么代理商下拉框只显示长沙的代理商。
    本来认为这个很好实现,但实际改起来的时候发现问题多多,主要问题是原有的地区联动是用js实现的,它的数据源是一个xml文件,当然如果下拉框是服务器端控件那么问题是很好解决的,现在是html控件一下子似乎还真有些不好改,想了几种办法实现起来都不理想,最后将思路转向用ajax来实现问题才迎刃而解,现在仔细一想,像这种情况似乎只有用ajax才能比较好的解决,如果是在地区下拉框的onchange事件里向后台进行一次提交,将地区下拉框的id传过去的话,实际上产生的回发会将地区联动下拉框重新初始化。
    现在我具体谈谈这个ajax实现的过程。
    首先页面当然需要定义一个下拉框的html控件。

 <select id="Agent" name="Agent"></select>

接下来当然是定义XmlHttpRequest对象。

var xmlhttp;
function CreateXmlHttp()
   {  


   //非IE浏览器创建XmlHttpRequest对象
    if(window.XmlHttpRequest)
    {
     xmlhttp=new XmlHttpRequest();
    }
    //IE浏览器创建XmlHttpRequest对象
     if(window.ActiveXObject)
    {
    try
    {
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    }
    catch(e)
    {
    try{
     xmlhttp=new ActiveXObject("msxml2.XMLHTTP");
     }
     catch(ex){}
    }
    }
   }  

这个在我的多篇blog文章里都有阐述,就不多说了。

接下来当然是利用该对象来发送条件,获得数据,并且将获得的数据绑定到agent这个下拉框。
在地区下拉框的onchange事件里面触发函数AjaxSend();

function AjaxSend()
{
     //创建XmlHttpRequest对象
     CreateXmlHttp();     
     if(!xmlhttp)
     {
         alert("创建xmlhttpRequest发生异常!");
         return false;
     }   
     //获取地区下拉框的value值,作为条件发送
     var ss=document.getElementById("a2").value.substring(0,4);
     }
    //要发送的url,UserAjax我专门用来取数据
     url="UserAjax.aspx?area="+ss;
     xmlhttp.open("POST",url,false); 
        
   
     xmlhttp.onreadystatechange=function()
     { 
 
         if(xmlhttp.readyState==4)
         {
             if(xmlhttp.status==200)
             {  
               //清空原下拉框
              document.getElementById("agent").options.length=0;           
               //str为返回的一个字符串,形式为"0001/代理商1,0002/代理商2,0003/代理商3"
               var str=xmlhttp.responseText;
              //将该字符串分割为数组形式
               var strs=str.split(",");
               document.getElementById("agent").options.add(new Option("----------","000000"));
               for(var i=0;i<strs.length-1;i++)
               {
                //获取value值(编号)
                var a=strs[i].substring(0,strs[i].lastIndexOf("/"));
                //获取绑定内容
                var b=strs[i].substring(strs[i].lastIndexOf("/")+1,strs.length);
                //绑定到下拉框
                document.getElementById("agent").options.add(new Option(b,a));               
               }
                 
             } 
          } 
      }           
      xmlhttp.send();
}

另外顺便介绍一下UserAjax接收到该地区编号后获取数据返回字符串的过程。

 string Area = Request.QueryString["area"].ToString();
        DataTable data = "生成DataTable,涉及到公司核心代码,省略"
        string aa = "";
        for (int i = 0; i < data.Rows.Count; i++)
        {
            if (aa == "")
            {
                aa = data.Rows[i]["id"].ToString()+"/"+data.Rows[i]["name"].ToString();
            }
            else
            {
                aa = aa + "," + data.Rows[i]["id"].ToString() +"/"+ data.Rows[i]["name"].ToString();
            }
        }
       Response.Write(aa);
 
 
摘自:http://www.cnblogs.com/ustbwuyi/archive/2007/03/19/679586.html

AJAX 小实例(转摘)的更多相关文章

  1. Ajax 小实例

    1.urls.py url(r'^jiafa', views.jiafa), 2.views.py def jiafa(request): if request.method == "GET ...

  2. ajax常用实例代码总结新手向参考(一)

    http的交互方法有四种:get.post.put(增加数据).delete(删除数据) put和delete实现用的是get和post   get方式 页面不能被修改,只是获取查询信息.但是提交的数 ...

  3. JavaScript小实例:拖拽应用(二)

    经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...

  4. winform 异步读取数据 小实例

    这几天对突然对委托事件,异步编程产生了兴趣,大量阅读前辈们的代码后自己总结了一下. 主要是实现 DataTable的导入导出,当然可以模拟从数据库读取大量数据,这可能需要一定的时间,然后 再把数据导入 ...

  5. CSS应用内容补充及小实例

    一.clear 清除浮动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  6. Objective-C之代理设计模式小实例

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. Objective-C之@类别小实例

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. OC小实例关于init方法不小心的错误

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. canva实践小实例 —— 马赛克效果

    前面给大家带来了操作像素的API,此时此刻,我觉得应该配以小实例来进行进一步的说明和演示,以便给大家带来更宽广的视野和灵感,你们看了我的那么多的文章,应该是懂我的风格,废话不多说,进入正题: 这次给大 ...

随机推荐

  1. sql server 2008 com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机

    右击我的电脑,点击管理 右击"TCP/IP"选择"属性"(或双击"TCP/IP"),选择"IP地址"选项卡,最下面有个& ...

  2. Mac下启动Apache

    1.启动 sudo apachectl -k start 2.重新启动 sudo apachectl -k restart     //-------------------------------- ...

  3. css实现居中

    --在html常常用到居中 --1.可以用<center></center> --2.可以用css 演示代码: <!DOCTYPE html PUBLIC "- ...

  4. Wing IDE编译TesorFlow中Mnist convolutional 实例

    # # http://www.cnblogs.com/mydebug/ # from __future__ import absolute_import from __future__ import ...

  5. T-SQL利用Row_Number函数实现分页

    SQL: CREATE PROCEDURE PagingViewTest ( @currentPageIndex INT, --页序号 @pageSize INT, --页大小 @pageCount ...

  6. 轻松学习Ionic (四) 修改应用图标及添加启动画面(更新官方命令行工具自动生成)

    由于Ionic更新了命令行工具,以后修改应用图标和添加启动画面就简单了,最新方法见最下方:   应用图标:   1.在整个项目所在文件夹下创建res文件夹,里边再分别创建两个文件夹android和io ...

  7. 实用工具推荐(Live Writer)(2015年05月26日)

    1.写博客的实用工具 推荐软件:Live Writer 使用步骤: 1.安装 Live Essential 2011,下载地址:http://explore.live.com/windows-live ...

  8. Entity Framework + WCF REST JSON Service

    利用EF 和WCF 建立一个REST JSON Service. 首先我们要下载一个Visual Studio 的Template 叫 "ADO.NET C# POCO Entity Gen ...

  9. HDOJ2026首字母变大写

    首字母变大写 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. android用异步操作AsyncTask编写文件查看器

    Activity程序 package com.example.fileasynctaskproject; import java.io.File; import java.util.ArrayList ...