通过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来实现。

 

目录
相关文章
|
5天前
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
4天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
17 7
|
24天前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
40 11
|
23天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
1月前
|
前端开发 JavaScript
jQuery - AJAX load() 方法
jQuery load() 方法是简单但强大的 AJAX 方法。
43 6
|
2月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
30 1
|
2月前
|
消息中间件 关系型数据库 数据库
Python实时监测数据库表数据变化的方法
在实现时,需要考虑到应用的实时性需求、数据库性能影响以及网络延迟等因素,选择最适合的方法。每种方法都有其适用场景和限制,理解这些方法的原理和应用,将帮助开发者在实际项目中做出最合适的技术选择。
110 17
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
30 4
|
2月前
|
JavaScript 前端开发
jQuery - AJAX load() 方法
jQuery - AJAX load() 方法
20 2
|
2月前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法