实现省市县镇村5级联动。
效果如下:
服务器比较渣,所以每次请求服务器需要的时间比较长。
数据来源于之前的一篇文章:全国各省、市、县、镇、村的mysql数据库和JSON格式数据。
as源码:
package { import fl.controls.ComboBox; import fl.data.DataProvider; import flash.display.MovieClip; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.text.TextField; public class Main extends MovieClip { public var province:ComboBox; public var city:ComboBox; public var county:ComboBox; public var town:ComboBox; public var village:ComboBox; public var tf:TextField; public var loading:MovieClip; private var baseUrl:String = "/api/villages/read.php"; public function Main() { // constructor code loading.visible = false; province.addEventListener(Event.CHANGE, provinceChange); city.addEventListener(Event.CHANGE, cityChange); county.addEventListener(Event.CHANGE, countyChange); town.addEventListener(Event.CHANGE, townChange); village.addEventListener(Event.CHANGE, villageChange); province.labelField = "name"; city.labelField = "name"; county.labelField = "name"; town.labelField = "name"; village.labelField = "name"; province.prompt = "省"; city.prompt = "市"; county.prompt = "县(区)"; town.prompt = "镇(乡)"; village.prompt = "村(街道)"; loadJson("china.json", provinceLoaded); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { updateText(); } //-------- /** * 省数据加载完成 * @param json */ private function provinceLoaded(json:Object):void { province.dataProvider = json2dataProvider(json); } /** * 选择的省改变 * @param e */ private function provinceChange(e:Event):void { city.dataProvider = new DataProvider([]); county.dataProvider = new DataProvider([]); town.dataProvider = new DataProvider([]); village.dataProvider = new DataProvider([]); //trace(province.selectedItem); loadJson("china/"+province.selectedItem.id+".json", cityLoaded); } //-------- /** * 市数据加载完成 * @param json */ private function cityLoaded(json:Object):void { city.dataProvider = json2dataProvider(json); } /** * 选择的市改变 * @param e */ private function cityChange(e:Event):void { county.dataProvider = new DataProvider([]); town.dataProvider = new DataProvider([]); village.dataProvider = new DataProvider([]); //trace(city.selectedItem); loadJson("china/"+province.selectedItem.id+"/"+city.selectedItem.id+".json", countyLoaded); } //-------- /** * 县数据加载完成 * @param json */ private function countyLoaded(json:Object):void { county.dataProvider = json2dataProvider(json); } /** * 选择的县改变 * @param e */ private function countyChange(e:Event):void { town.dataProvider = new DataProvider([]); village.dataProvider = new DataProvider([]); //trace(county.selectedItem); loadJson("china/"+province.selectedItem.id+"/"+city.selectedItem.id+"/"+county.selectedItem.id+".json", townLoaded); } //-------- /** * 镇数据加载完成 * @param json */ private function townLoaded(json:Object):void { town.dataProvider = json2dataProvider(json); } /** * 选择的镇改变 * @param e */ private function townChange(e:Event):void { village.dataProvider = new DataProvider([]); //trace(town.selectedItem); loadJson("china/" + province.selectedItem.id + "/" + city.selectedItem.id + "/" + county.selectedItem.id + "/" + town.selectedItem.id + ".json", villageLoaded); } //-------- /** * 村数据加载完成 * @param json */ private function villageLoaded(json:Object):void { village.dataProvider = json2dataProvider(json); } /** * 选择的村改变 * @param e */ private function villageChange(e:Event):void { //trace(village.selectedItem); } private function updateText():void { tf.text = (province.selectedLabel||"") + (city.selectedLabel||"") + (county.selectedLabel||"") + (town.selectedLabel||"") + (village.selectedLabel||""); } //----------------------工具------------------------------- /** * 加载的json数据转换成DataProvider * @param json * @return */ private function json2dataProvider(json:Object):DataProvider { var arr:Array = []; for (var key:String in json) { arr.push({"name":json[key],"id":key}); } var data:DataProvider = new DataProvider(arr); data.sortOn("id", Array.NUMERIC);//排序 return data; } /** * 加载json数据 * @param url * @param callback */ private function loadJson(url:String, callback:Function):void { loading.visible = true; var uld:URLLoader = new URLLoader(); uld.addEventListener(Event.COMPLETE, onLoaded); var req:URLRequest = new URLRequest(baseUrl +"?location=" + url.replace(/\//g, ",")+"&a="+(new Date().getTime())); req.method = URLRequestMethod.GET; uld.load(req); function onLoaded(e:Event):void { uld.removeEventListener(Event.COMPLETE, onLoaded); callback(JSON.parse(uld.data.toString())); uld = null; loading.visible = false; } } //end } }
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。