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

 

目录
相关文章
|
7月前
|
XML Java 关系型数据库
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
|
8月前
|
XML 数据格式
XML配置Servlet文件,不使用注解配置路径的方法
XML配置Servlet文件,不使用注解配置路径的方法
|
8月前
|
XML 关系型数据库 数据库
使用mybatis-generator插件生成postgresql数据库model、mapper、xml
使用mybatis-generator插件生成postgresql数据库model、mapper、xml
697 0
|
8月前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
79 3
|
8月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
102 3
|
8月前
|
XML Java 数据库连接
idea 从mapper方法直接点进xml文件的解决方法
idea 从mapper方法直接点进xml文件的解决方法
788 2
|
8月前
|
XML JavaScript 前端开发
属性和方法向 XML DOM 定义了编程接口
XML DOM 是一个编程接口,它将XML表示为节点对象集合,可通过JavaScript等语言访问。接口通过属性和方法定义,属性如nodeName、nodeValue显示节点信息,方法如getElementsByTagName、appendChild、removeChild执行操作。例如,x.nodeName返回节点名称,x.appendChild(node)添加子节点。
|
9月前
|
XML JavaScript 前端开发
XML DOM - 属性和方法
**XML DOM 提供编程接口,将XML转换为节点对象,便于通过JS等语言操作。属性如 nodeName、nodeValue、parentNode、childNodes 和 attributes 描述节点详情。方法用于执行操作,如删除节点。**
|
9月前
|
XML JavaScript 前端开发
属性和方法向 XML DOM 定义了编程接口
XML DOM 提供编程接口,通过属性和方法操作XML结构。使用JavaScript等语言,可访问和修改节点。属性如nodeName、nodeValue揭示节点信息,方法如getElementsByTagName、appendChild、removeChild实现查找、添加和删除节点功能。节点对象x的应用示例贯穿其中。
|
9月前
|
XML Java 数据库连接
Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
【5月更文挑战第10天】Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
106 6