80. 现在来讲一下,下拉,一点华北区,华北区下面都有哪些省,其实这个做法有多种,我们可以归纳有三种吧,
一。一进来把所有的数据都读进来,把所有的大区都读进来,把各个大区对应的省全都读出来,放到js的一个数组里,你一点分销大区,响应一个事件,然后
到数组里面取出来,取出来之后用dom操作下拉列表给他添上。这种方案不会刷新的,因为用dom直接就操作我们的下拉列表,但是用dom有一个缺点,他会把所有数据全都读出来,比如说你一点这个页面一进来他就把所有的数据给读出来了。我也许只想看华南区,结果他会把所有的数据全读到客户端,例如,假设现在别人又加了一个省呢?你肯定是看不见的。他加到数据里了,他就不再读了,除非你再点一下。
二。另外一种方案,一点他,就是请求一个servlet到数据库中去查询分销大区,然后一刷新,页面上就出来了,这个结果还得保持住,再把第二个分销省里面的东西给加上,这是以前的做法挺多的。这种方案给人的感觉就是不好,总刷新,response回来,response回来.
三。现在采用ajax来做这个下拉,这种方式有一个好处,比如谁要是加入了一个省,我们肯定是能即时拿到的。还有一个好处,他不刷新 啊。
81. 现在开始做了,你得有一个方法能得到大区的数据啊,还得有一个取得省的方法。
public Map<Integer,String> getRegionList(){
//取得区域我们就可以用下面的方法了
return getProvByRegionId(10000);里面所有的东西都是这下面的。大区就是10000啊,比如华北,华南都是1000
}
//取得省
public Map<Integer,String> getProvByRegionId(int id){
String sql = "select id,name from t_client where pid=?";
}
82. 第一个大区是一进来里面就从数据库里面拿到值 放进来的,在jsp页面用for循环读取出来的,你是了for读一个map读出来的。
接下来省,应该是选中大区了,响应一个事件, 再去请求数据库查出来。
83. 你在servlet里面不能输出map,map在ajax里面是不认识的。你可以把他搞成一个字符串啊比如搞成下面这样
10023,吉林省#10025,辽宁省#10026,黑龙江 我在servlet里把map解开,然后生成这么一个串,然后打印到ajax引擎里面,然后通过 responseText把他取出来,取出来之后 ,我用Js把上面那一串给解开 ,解完之后,我就可以动态地用js来操作这个dom,把他给写上去。
或者你不想用,# 你也可以用 - 或者全逗号,你自己怎么设你就怎么解吧,这种做法不标准,假设你想把这个数据传递给别人,假设专门做前台的是一个人,做后台的是一个人,你往这给他发数据,就不太标准,你俩还得约定。
84. 所以我们用 标准文档 xml 示例做法如下
<items>
<item>
<id>10023</id>
<name>吉林省</name>
</item>
</items>
85. 其实你使用前面的自己定义串再自己解,或者采用另一种用xml来做,都能做出来,但是第一种效率上肯定会好很多,因为前面那样做没有任何多余的东西。
86. 现在采用dom4j来解析xml。现在是写,以前是读啊,关于这个第三方的东西,就通过第三方的例子来使用,
87. document代表整篇的xml文档。
现在来写啊,先创建一个document
Document doc = DocumentHelper.createDocument();
Element rootElt = doc.addElement("items");
Element itemElt = rootElt.addElement("item");
Element idElt = itemElt.addElement("id");
idElt.setText("10023");
Element nameElt = itemElt.addElement("name");
nameElt.setText("吉林省");
//现在就写完了,但是你得输出啊
XMLWriter writer = new XMLWriter(new FileWriter("c:\\testXml.xml"));
writer.write(doc); 把这个文档写了
就放这吧,关于这个资源的释放最好放到finally里面
writer.close();
System.out.println("写xml成功");
88. 你这么一写,他这个xml文档的默认字符编码是utf-8的,下面一运行,就会生成一个xml文件,编码是Utf-8的。
89. 你还可以这么一写他就是指定的编码方式的了。
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(new FileWriter("c:\\testXml.xml"),fromat);
生成一个GBK编码的xml文档。
90. 他说xml编码一般使用utf-8编码。
91. 你看啊,他现在是写成了一个文件,我们要求的肯定不是把文件发过去,发到我们的ajax,我们
应该要的是他的文本,也就是字符串,那怎么样能拿出字符串呢?
92. 要拿字符串的话
在Element nameElt = itemElt.addElement("name");
nameElt.setText("吉林省");
String.xmlString = doc.asXML();
System.out.println(xmlString);就把xml里面的东西当作一个串打印出来。如
<?xml >
<items><item><id></id></items>没有写全
93. 往客户端写东西,你得注意了编码和类型啊,这里是写一个xml文件过去,所以就得这么写
response.setContentType("text/xml;charset="UTF-8");在这里使用Utf-8了,其实使用utf-8比较广泛,有些框架,比如 js可能还出问题,因为utf-8是全球统一的一个编码。
94. 他是这么做的,写了一个servlet,在地址栏一运行这个servlet并且传递 区域代码SelectProvServlet?regionId=10021就自动生成一个xml文档在浏览器里面。
95. 现在使用js来对xml进行解析,要求是这样,在分销商级别分布图,点下拉的区域,选中之后,应该去请求一个servlet
onchange="selectProv"
function selectProv(field){
field.value;
}
if(xmlHttp.status == 200){
alert(xmlHttp.responseTest);这样就把那个
<?xml >
<items><item><id></id></items>这样的字符串拿到了。
}
96. 如果像以前那个,用逗号表达式来写的话,返回的东西 10001,吉林省# 这样解析起来不是更好吗?你看现在是一个这样的东西返回来,你怎么解啊,
97. 有一个responseXML 他就会给我们生成一个document。
if(xmlHttp.status == 200){
var doc = xmlHttp.responseXML();这不就是刚才那一串不。
//得到一个数组
var items = doc.getElementsByTagName("item");
for(var i=0;i<items.length;i++){
var id = items[i].childNodes[0].childNodes[0].nodeValue;
var name = items[i].childNodes[1].childNodes[0].nodeValue;
}
}
<id>100023</id>在xml中比如这个id标签里面的值也是一个节点 。所以上面得继续深入.childNodes[0].nodeValue
98. 上面的id name 取值也有其它的取法。我们可以取他的第一个,他有first相关方法,他说什么他找给我们的那个帮助文档里面,没有这个。
var id = items[i].childNodes[0].firstChild.nodeValue;
var name = items[i].childNodes[1].firstChild.nodeValue;
99. add()方法用于向<select>添加一个<option>元素
100. 构造Option下拉列表
Option o = new Option(name,id);
provSelect.add(o); 会报缺少分号的错误,注意啦,js 不是强类型的,
var o = new Option(name,id);
provSelect.add(o);
他在不刷新的情况下操作dom.
现在做是做好了,但是效果是点中华南区,分销的省出来了,再点其他区,分销省不会变了,所以你得把以前的清了。 在加之前清一下不就可以了吗?
在for循环语句之前,把数组设置为0不就清了吗?
provSelect.options.length = 0;
第次清完,再把全部这一项给加上
var o = new Option("全部",0);
provSelect.add(0);
还有一个问题,你点分销大区里面的全部,分销省里面的 所有分销商这一项不应该出来,你一点全部,后面一个应该还是全部,是应该你把全部这个 值0,给传到servlet里面去了,他也按0去查,所以你把这个 js 函数给加一个条件,让他 0除外。
分享到:
相关推荐
ta_lib-0.5.1-cp312-cp312-win32.whl
课程设计 在线实时的斗兽棋游戏,时间赶,粗暴的使用jQuery + websoket 实现实时H5对战游戏 + java.zip课程设计
ta_lib-0.5.1-cp310-cp310-win_amd64.whl
基于springboot+vue物流系统源码数据库文档.zip
GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载
知识图谱
333498005787635解决keil下载失败的文件.zip
【微信机器人原理与实现】 微信机器人是通过模拟微信客户端的行为,自动处理消息、发送消息的程序。在Python中实现微信机器人的主要库是WeChatBot,它提供了丰富的接口,允许开发者方便地进行微信消息的接收与发送。这个项目标题中的"基于python实现的微信机器人源码"指的是使用Python编程语言编写的微信机器人程序。 1. **Python基础**:Python是一种高级编程语言,以其简洁的语法和强大的功能深受开发者喜爱。在实现微信机器人时,你需要熟悉Python的基本语法、数据类型、函数、类以及异常处理等概念。 2. **微信API与WeChatBot库**:微信为开发者提供了微信公共平台和微信开放平台,可以获取到必要的API来实现机器人功能。WeChatBot库是Python中一个用于微信开发的第三方库,它封装了微信的API,简化了消息处理的流程。使用WeChatBot,开发者可以快速搭建起一个微信机器人。 3. **微信OAuth2.0授权**:为了能够接入微信,首先需要通过OAuth2.0协议获取用户的授权。用户授权后,机器人可以获取到微信用户的身份信息,从而进行
基于springboot实验室研究生信息管理系统源码数据库文档.zip
张力控制,色标跟踪,多轴同步,电子凸轮,横切等工艺控制案例。
在Python编程环境中,处理Microsoft Word文档是一项常见的任务。Python提供了几个库来实现这一目标,如`python-docx`,它可以让我们创建、修改和操作.docx文件。本教程将重点介绍如何利用Python进行Word文档的合并、格式转换以及转换为PDF。 1. **合并Word文档(merge4docx)** 合并多个Word文档是一项实用的功能,特别是在处理大量报告或文档集合时。在Python中,可以使用`python-docx`库实现。我们需要导入`docx`模块,然后读取每个文档并将其内容插入到主文档中。以下是一个基本示例: ```python from docx import Document def merge4docx(file_list, output_file): main_doc = Document() for file in file_list: doc = Document(file) for paragraph in doc.paragraphs: main_doc.add_paragraph(paragraph.text) m
基于springboot+Javaweb的二手图书交易系统源码数据库文档.zip
基于springboot餐品美食论坛源码数据库文档.zip
基于springboot亚运会志愿者管理系统源码数据库文档.zip
使用WPF的数据样式绑定,切换对象数据值来完成控件动态切换背景渐变动画效果。 使用动画样式渲染比线程修改性能消耗更低更稳定
基于SpringBoot的企业客源关系管理系统源码数据库文档.zip
基于springboot+vue的桂林旅游网站系统源码数据库文档.zip
基于springboot嗨玩旅游网站源码数据库文档.zip
基于springboot的流浪动物管理系统源码数据库文档.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip