通过Ajax异步提交的方法实现从数据库获取省份和城市信息实现二级联动(xml方法)

简介: 之前有写过是从JavaScript数组里获取省市信息来实现二级联动,但是似乎有很多需求是要从数据库里获取信息,所以就需要根据异步提交,局部刷新的思想来实现来提高用户交互问题第一种方法是xml方法1.

之前有写过是从JavaScript数组里获取省市信息来实现二级联动,但是似乎有很多需求是要从数据库里获取信息,所以就需要根据异步提交,局部刷新的思想来实现来提高用户交互问题

第一种方法是xml方法

1.首先在jsp页面的JavaScript,这段代码是通用的,所以把他放在函数外面,可以供其他的函数共同使用

 1 var xhr=false;
 2     //创建XMLHttpRequst对象
 3     if(window.XMLHttpRequest)
 4     {
 5         xhr=new XMLHttpRequest();
 6     }
 7     else if(window.ActiveXObject)
 8     {
 9         xhr=new ActiveXObject("Microsoft.XMLHTTP");
10     }
11     else
12     {
13         xhr=false;
14     }

2.获取所选择的省份value值,并将value值通过异步提交传到servlet

 1 //获取城市的信息
 2     function getCity()
 3     {
 4         //省份下拉框的对象
 5         var provinceobj=document.getElementById("province");
 6         //被选择的省份的索引
 7         var index=provinceobj.selectedIndex;
 8         //被选择的省份的value值
 9         var provincevalue=provinceobj[index].value;
10         //被选择的省份的text值
11         var province=provinceobj[index].Text;
12         alert(provincevalue);
13         var url="<%=basepath%>CityServlet";/* post请求不在url上带参数 */
14         <%-- var url="<%=basepath%>CityServlet?provincevalue="+provincevalue; --%>//get请求在url上带参数
15         xhr.open("post",url,true);//设置为post提交方式,true表示为异步提交
16         //post提交方式的时候需要设置提交的编码
17         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
18         //当状态改变时,调用callBack_XML来判断是否需要接收数据 
19      xhr.onreadystatechange=callBack_XML;//xml方法
20     //通过post提交的时候需要将数据放到send里传到servlet里
21     xhr.send("provincevalue="+provincevalue);
22     //xhr.send(null);
23   }

3.编写回调函数callBack_XML(),此函数判断当服务器响应正常时,接收数据并作出处理

 1 function callBack_XML()//xml方法来获取
 2     {
 3         //城市下拉选择框的对象
 4         var cityobj=document.getElementById("city");
 5         //当请求状态等于4时,相应已完成,可以访问服务器响应并使用它
 6         if(xhr.readyState==4)
 7         {
 8             //当状态为200时意味着,状态正常,未出错
 9             if(xhr.status==200)
10             {
11                 alert("响应成功");
12                 //获取相应的xml文档
13                 var cityxml=xhr.responseXML;
14                 alert(cityxml);
15                 //获取根元素
16                 var root=cityxml.documentElement;
17                 //获取根元素(city_info)下面的所有city元素
18                 var cities=root.getElementsByTagName("city");
19                 //将下拉框内容清除
20                 cityobj.options.length=1;
21                 for(var i=0;i<cities.length;i++)
22                 {
23                     var city=cities[i];
24                     //获取节点的值
25                     var cid=city.childNodes[0].firstChild.nodeValue;
26                     var cname=city.childNodes[2].firstChild.nodeValue;
27                     //alert(cid+"   "+cname);
28                     //放到下拉选择框里Option(文本内容,value值);
29                     cityobj.options[cityobj.options.length]=new Option(cname,cid);
30                 }
31                 
32             }
33             //当状态为404时,表示找不到页面
34             else if(xhr.status==404)
35             {
36                 alert("Request URL is not exists!");
37             }
38             else
39             {
40                 alert("Error:Status is:"+request.status);
41             }
42         }
43         
44     }

4.在servlet页面:

 1 String provincevalue=request.getParameter("provincevalue");
 2         System.out.println("省份编号:"+provincevalue);
 3         CityService cityservice=CityService.getCityService();
 4         List<City> citylist=cityservice.getCity(provincevalue);
 5         for(int i=0;i<citylist.size();i++)
 6         {
 7             System.out.println(citylist.get(i));
 8         }
 9 
10         //生成xml页面
11         StringBuffer xml=new StringBuffer();
12         
13         xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
14         xml.append("<city_info>");
15         for(City c : citylist)
16         {
17             xml.append("<city>");
18             xml.append("<id>"+c.getId()+"</id>");
19             xml.append("<cityid>"+c.getCityid()+"</cityid>");
20             xml.append("<cityname>"+c.getCity()+"</cityname>");
21             xml.append("<province>"+c.getFather()+"</province>");
22             xml.append("</city>");
23         }
24         xml.append("</city_info>");
25         
26         //设置响应字符集编码,防止中文乱码
27         response.setCharacterEncoding("utf-8");
28         response.setContentType("text/xml;charset=utf-8");
29         //将xml文档写出去
30         PrintWriter writer=response.getWriter();
31         //因为只能写字符串,所以toString
32         writer.write(xml.toString());
33         writer.flush();
34         writer.close();
35     }

这样就完成了用xml实现异步提交和局部刷新来实现省市二级联动

接下来会有利用json来实现。

 

目录
相关文章
|
1月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
13 1
|
1月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
10 0
|
6天前
|
存储 Oracle 关系型数据库
Oracle的模式与模式对象:数据库的“城市规划师”
【4月更文挑战第19天】在Oracle数据库中,模式是用户对象的集合,相当于数据库的城市规划,包含表、视图、索引等模式对象。模式对象是数据存储结构,如表用于存储数据,视图提供不同查看角度,索引加速数据定位。良好的模式与模式对象设计关乎数据效率、安全和稳定性。规划时需考虑业务需求、性能、安全和可扩展性,以构建高效数据库环境,支持企业业务发展。
|
6月前
|
前端开发 Java 数据库
JSp城市生活信息收集发布网myeclipse开发sqlserver2008数据库BS模式java编程网页结构struts2
JSP城市生活信息收集发布网是一套完善的web设计系统,对理解JSP java编程开发语言有帮助 struts2 dao+bean mvc模式,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为sqlserver2008,使用java语言开发,系统主要采用B/S模式开发。
24 0
|
3月前
|
JSON 前端开发 JavaScript
探秘 AJAX:让网页变得更智能的异步技术(下)
探秘 AJAX:让网页变得更智能的异步技术(下)
探秘 AJAX:让网页变得更智能的异步技术(下)
|
3月前
|
XML 前端开发 JavaScript
探秘 AJAX:让网页变得更智能的异步技术(上)
探秘 AJAX:让网页变得更智能的异步技术(上)
探秘 AJAX:让网页变得更智能的异步技术(上)
|
3月前
|
XML JSON JavaScript
理解一句话【async javascript and xml `异步的JS` 的 `XML`】
理解一句话【async javascript and xml `异步的JS` 的 `XML`】
35 0
|
4月前
|
SQL Java 数据库连接
Java【付诸实践 01】使用org.apache.ibatis.plugin.Interceptor拦截器实现全局mapper.xml参数注入(可用于切换数据库实例schema)源码实例分享
Java【付诸实践 01】使用org.apache.ibatis.plugin.Interceptor拦截器实现全局mapper.xml参数注入(可用于切换数据库实例schema)源码实例分享
40 0
|
4月前
|
XML 关系型数据库 MySQL
【Mysql】有关数据库中一对多/一对一,多对一xml中文件映射问题
【Mysql】有关数据库中一对多/一对一,多对一xml中文件映射问题
27 0
|
9月前
|
XML 数据库 数据格式
数据库视频第六章 XML查询,FOR XML语句
数据库视频第六章 XML查询,FOR XML语句