利用js+php的技术,实现全国地址多级联动的功能
来源:互联网 发布:比较好的php框架 编辑:程序博客网 时间:2024/05/17 21:58
项目开发已经快到收尾的阶段,但还有几个功能还没有完成,其中有一个功能,让我纠结了几天——全国省份、城市、区/县和街道/镇的显示。
看到这个需求的时候,第一反应是这只不过是个简单的“多级联动”的问题,没有什么难度。无非就是将全国所有的城市资料写入到数据表就行了。但是一想到全国那么多城市,我就懵了。这个工作量不小,于是百度到这么一篇文章-《世界国家省份城市县区街道村地址邮编常用通用功》。
这篇文章研究了某宝的实现过程,将省份、城市和区/县的数据写入到js的变量中,而通过ajax接收街道/镇的信息。其思想也是多级联动,但是将数据来源分成两部分,因为省份、城市和区/县的数据基本上不会变动,放在js中,减轻服务器的压力,想想也蛮有道理的。于是,我就开始在这个思路的指引下,开始落地的工作。
第一步:将省份、城市和区/县的数据放在变量中
当看到这样的代码的时候,我是表示拒绝的。通过转码工具,我看到这里的数据包括国外的地址,那这些不是我需要的,当然剔除掉。这个过程是枯燥的,找到你想要的省份信息。这里我就不说了。
第二步:研究这些数组的规律,找到我们想要的数据
对数据进行转化之后,发现了规律:["前一级别地址编号",["地址简体字","地址繁体字"],"本级别地址编号","0"]。有了这个规律,后面的事情就简单了。
第三步:获取本级别的编码,遍历数组,找到想要的数据。
在jquery代码中,流程是这样的:1.通过change事件获取省份的编码;2.清空城市一栏的内容;3.遍历包含所有地址信息的变量t,通过判断获取城市的信息;4.通过eval()将unicode转化成中文。按照这个思路,就能完成p(省份)、c(城市)和s(区/县)的显示,下面就要讲怎么获取“街道/镇”的信息。
第四步:通过某宝的url,获取街道/镇的信息
在那篇文章中,你会看到这个url:https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1=110000&l2=110100&l3=110101&lang=zh-S&_ksTS=1432880083437_7507&callback=jsonp7508。
会得到这样的结果:
我尝试了这个url的各个参数,发现只有三个是必须的,分别是l1、l2、l3,代表的意思分别是省份编码、城市编码和区/县编码。
一开始,我是直接用$.ajax()的方式去进行的,但是会报出错误。最后发现ajax只能在本域名下进行,而不能调用其他网站的url。然后找到的解决方案是,利用ajax技术,在本域的php中获取url返回的数据,再返回给jquery,解析获得你想要的数据。
代码模型如下:
通过url返回的数据格式是jsonp格式,但是我没学过,也懒得学,就直接在php文件中,通过str_replace进行修改,去除掉没用的字符,得到json格式。这样一来,就简单多了。
最后看看效果图:
到这里,获取全国地址的多级联动基本完成,但是还需要完善。感谢某宝的url~
- 利用js+php的技术,实现全国地址多级联动的功能
- 利用JS配合XMLHTTP方法实现多级联动的例子
- Flex的多级联动功能
- 全国省市的二级联动js方法
- js中的二级联动技术的实现
- 基于Spinner实现的三级联动、多级联动
- 城市的多级联动
- 利用jquery、json实现前台无刷新的多级联动下拉菜单
- 由ajax,js,xml,php实现的三级联动省市县下拉功能
- 全国省市县三级地址联动js
- php ajax实现的二级(多级)联动菜单(2008-10-21,11:36:08)
- 使用js实现一个地址的三级联动
- 利用JS实现JSF页面h:selectOneMenu的联动
- 利用JS实现JSF页面h:selectOneMenu的联动
- 总结一下自己第一次写出了的多级联动js
- 基于vue2.0.js的多级联动选择器
- 用js实现全国省市区联动
- 封装的多级联动框
- LeetCode:Distinct Subsequences
- Android开发技术点
- 利用广播接受者监听用户短信
- C++基础<01>—C++初识
- LightOJ 1214 Large Division(大整数取模)
- 利用js+php的技术,实现全国地址多级联动的功能
- 图片的翻转_opencv
- 从源码学Android(一) : Android源码编译
- JS报错:Uncaught SyntaxError: Unexpected identifier
- Android项目使用Ant打包,自动生成build.xml
- Boost string_algo
- JavaScript的常用内置类
- CodeForces 3D Least Cost Bracket Sequence (贪心+优先队列)
- 第4章第1节练习题1 二叉树的基本操作(递归实现)