通过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月前
|
前端开发 JavaScript Java
使用Ajax进行异步交互:提升Java Web应用的用户体验
【4月更文挑战第3天】Ajax技术在Web开发中提升UX,通过与服务器异步交互实现页面局部更新,无需完整刷新。核心组件包括XMLHttpRequest、JavaScript、HTML/CSS及服务器端脚本。在Java Web应用中,可使用原生JavaScript或框架如jQuery、AngularJS实现Ajax请求。Ajax减少页面刷新,实现实时数据更新,即时表单验证和动态UI,显著改善用户体验,是现代Web开发不可或缺的一部分。
|
2月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
11 0
|
4月前
|
前端开发 JavaScript API
Ajax技术的秘密揭秘:异步传输,高效交互
Ajax技术的秘密揭秘:异步传输,高效交互
|
5天前
|
XML JavaScript 前端开发
XML DOM 节点信息
XML DOM 节点详解:nodeName、nodeValue 和 nodeType 属性用于获取和操作节点信息。示例展示如何加载XML文件,如books.xml,通过loadXMLDoc函数。nodeName获取元素节点名,nodeValue用于获取或设置文本节点内容,nodeType显示节点类型(如元素:1,属性:2,文本:3,注释:8,文档:9)。每个节点都是可访问和操作的对象,包含方法和属性。
|
3月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
30 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
5天前
|
XML JavaScript 前端开发
XML DOM 节点信息
XML DOM中的每个节点都是一个具有方法和属性的对象,可通过JavaScript操作。关键属性有:nodeName(定义节点名称,如元素、属性或#text)、nodeValue(提供节点值,如文本或属性值)和nodeType。元素节点的nodeName等于标签名,属性节点的nodeName是属性名。文本节点的nodeValue是其文本内容,而文档节点的nodeName是&quot;#document&quot;。示例代码演示了如何获取第一个&lt;title&gt;元素的文本值。
|
7天前
|
XML JavaScript 前端开发
XML DOM - 属性和方法
XML DOM 提供编程接口,让开发者用JavaScript等语言操作XML文档。接口包含属性和方法,属性如nodeName、nodeValue、parentNode和childNodes,用于查询节点信息;方法如getElementsByTagName、appendChild和removeChild,执行增删操作。示例中,JavaScript代码`txt=xmlDoc.getElementsByTagName(&quot;title&quot;)[0].childNodes[0].nodeValue`从books.xml获取第一个&lt;title&gt;元素的文本内容,赋值给变量txt。
|
7天前
|
XML JSON 前端开发
学习Ajax使用异步对象发送请求
Ajax,全称Asynchronous JavaScript and XML(异步JavaScript和XML),是一种用于创建更好、更快以及交互性更强的Web应用程序的技术。
17 3
|
2月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
180 2
|
4月前
|
JSON 前端开发 JavaScript
探秘 AJAX:让网页变得更智能的异步技术(下)
探秘 AJAX:让网页变得更智能的异步技术(下)
探秘 AJAX:让网页变得更智能的异步技术(下)