实现省市县镇村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
}
}
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。