最近爲單位作了專家庫的小程序,沒個專家有擅長的領域,這是經過一個checkbox來提交和編輯的。由於不想刷新頁面,使用Ajax異步傳輸。php
首先從專業數據表中讀取全部的專業,而且生成checkbox:前端
$(document).ready(function(){ $.ajax({ type:"POST", url:"http://localhost/yibu/index.php/Home/Expertadd/expertecho",//對應控制器讀取專業列表 success:function(result){ var data = $.parseJSON(result); var len =data.length; var listHtml=""; for (var i = 0; i < len; i++) {//循環將專業併入checkbox listHtml+="<input type='checkbox' id='"+data[i]["major"]+"' name='major' value='"+data[i]["id"]+"'/>"+data[i]["major"]+""; } listHtml ="<tr><td colspan='2'><div class='divcheck'>"+listHtml+"</div></td></tr>"; $('#myTable').append(listHtml) } }) })
這段代碼不只生成了checkbox,而且將專業名稱與對應的專業ID分別存儲到checkbox中。ajax
接下來要對checkbox狀態進行判斷:json
var boolMajor = cheMajor.is(':checked')//checkbox狀態判斷
若是checkbox處於選中狀態,進行遍歷取值,並存儲到二維數組:小程序
for (var i = 0; i < cheMajor.length; i++) {//遍歷checkbox if(cheMajor[i].checked){ dataMajor.push({"majorid":cheMajor[i].value,"major":cheMajor[i].id});//專業能力數組賦值 }
}
二維數組沒法直接傳遞到後臺ThinkPHP的控制器,須要進行JSON序列化:數組
var jsonMajor = JSON.stringify(dataMajor);//專業能力數組用JSON序列化
序列化之後能夠直接調用Ajax傳遞數據了:app
$.ajax({//調用Ajax type:"POST", url:"<{:U('Expertadd/add')}>", data:{'dataExpert':dataExpert,'jsonMajor':jsonMajor},//傳遞數據到控制器 success:function(result){ if(result=="success"){ var appendDiv='<div id="appendDiv" class="alert green_alert"><p>專家信息寫入成功!</p></div>'; $("#clearfix").after(appendDiv); }
} })
後臺存入數據,須要將JSON字符串反序列化,注意加入參數「true」。這是爲了強制轉換爲數組。異步
$major=D("major");//定位數據表 $jsonMajor=$_POST["jsonMajor"];//接收JSON序列 $arrMajor = json_decode($jsonMajor,true);//專業能力數組反序列化 $len = count($arrMajor); for($i=0;$i<$len;$i++){ $arrMajor[$i]["expertid"]=$resultExpert;//專業能力數組加入對應專家ID } $resultMajor = $major->addall($arrMajor); if($resultExpert>0 && $resultMajor>0){//兩張表均寫入成功輸入信息給前端 echo "success"; }
JSON字符串反序列化之後,又進行了進一步加工,加入了對應的專家ID。url
至此,錄入的專家信息都有了對應的專業領域。spa
效果以下,首先是前臺界面:
插入的兩張數據表,專家信息表:
專家對應的專業能力表:
數據保存成功。