這篇文章介紹實現ajax三級聯動下拉式功能表的執行個體代碼
ajax寫三級聯動,先寫一個檔案類吧,以後用的時候直接調用即可;
來找一張表:
實現:
中國地區的三級聯動:省、市、區;
圖:
說一下思路:
(1)當使用者選擇省份的時候觸發事件,把當前的省份的id通過ajax發出請求傳遞到服務端的程式中
(2)比如取中國地區,中國是0001,那麼內建號為0001的便是中國地區;
北京的代號為11,那麼子代號為11的便是北京時的市區,
也就是說根據主代號查詢子代號;
(3)服務端根據用戶端的請求,查詢資料庫,並按照一定的格式返回給用戶端
顯示頁面非常簡單,只需要一個p,並引入js與jquery檔案即可:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> <script src="jquery-1.11.2.min.js"></script> <script src="sanji.js"></script></head><body><h1>三級聯動</h1><p id="sanji"></p></body></html>
我需要三個下拉框select,並賦予id寫方法
先來寫三個下拉框附上id,並執行三個方法:
$(document).ready(function(e){ //三個下拉式清單 //載入顯示資料 $("#sanji").html("<select id='sheng'></select><select id='shi'></select><select id='qu'></select>"); //載入省份 FillSheng(); //載入市 FillShi(); //載入區 FillQu();}
接下來去寫方法;
三個菜單是聯動的,也就是根據省的不同可以有不同的選項
這裡就不要用click()點擊事件了;用改變狀態時執行的改變事件change()
(1)當省份發生變化的時候:
//當省份發生變化 $("#sheng").change(function(){ FillShi(); FillQu(); })
市區,區縣發生改變
(2)當市區發生變化:
//當市發生改變 $("#shi").change(function(){ FillQu(); })});
區縣發生變化;
這個邏輯沒毛病;
再來就是把省份的資訊載入粗來,並在寫完ajax的遍曆結束時,值寫入市的下拉式功能表:
//載入省份資訊function FillSheng(){ //根據父級代號 //取父級代號 var pcode = "0001"; //根據父級代號查資料 $.ajax({ async:false, url:"cl.php", data:{pcode:pcode}, type:"POST", dataType:"JSON", success:function(data){ var str = ""; for(var sj in data) { str = str+"<option value = '"+data[sj].AreaCode+"'>"+data[sj].AreaName+"</optiom>"; } $("#sheng").html(str);} });}//載入市function FillShi(){ //根據父級代號 //取父級代號 var pcode = $("#sheng").val(); //根據父級代號查資料 $.ajax({ async:false, //取消非同步 url:"cl.php", data:{pcode:pcode}, type:"POST", dataType:"JSON", success:function(data){ var str = ""; for(var sj in data) { str = str+"<option value = '"+data[sj].AreaCode+"'>"+data[sj].AreaName+"</optiom>"; } $("#shi").html(str);}});}//載入區function FillQu(){ //根據父級代號 //取父級代號 var pcode = $("#shi").val(); //根據父級代號查資料 $.ajax({ url:"cl.php", data:{pcode:pcode}, type:"POST", dataType:"JSON", success:function(data){ var str = ""; for(var sj in data) { str = str+"<option value = '"+data[sj].AreaCode+"'>"+data[sj].AreaName+"</optiom>"; } $("#qu").html(str);}});}
這裡的格式用的是JSON 之前都是用"TEXT"
註:JSON
JSON是一種傳遞對象的文法,對象可以是name/value對,數組和其他對象
我們用到的是數組,那麼我們就需要遍曆數組,取到每一條資料,在js中遍曆數組用到的是
for(var sj in data)
{
}
來遍曆數組。格式!!!
這裡來寫上面說的那個檔案封裝類,找到我們以前我們的串連資料庫的類:
加上這段:
public function jsonQuery($sql,$type=1) { $db = new mysqli($this->host,$this->zhang,$this->mi,$this->dbname); $r = $db->query($sql); if($type == "1") { $arr = $r->fetch_all(MYSQLI_ASSOC); return json_encode($arr);//去掉最後豎線 } else { return $r; } }}
嗯,沒錯
處理頁面:
最後來說處理頁面:
<?php$pcode = $_POST["pcode"];include ("db.class.php");$db = new db();$sql = "select * from chinastates where ParentAreaCode = '{$pcode}'";echo $db->jsonQuery($sql);
連上資料庫,對象調用類,寫完sql語句直接返回就歐克!!!
就是這麼短!
:
相關文章:
用php實現城市地區三級聯動 附帶資料庫
js 實現省市區三級聯動菜單效果
Yii2實現中國省市區三級聯動執行個體