CREATE TABLE `cate` (
`ca_id` int(11) NOT NULL AUTO_INCREMENT,
`ca_name` varchar(50) NOT NULL,
`ca_pid` int(11) NOT NULL DEFAULT 0, -- 0 為頂層
PRIMARY KEY (`ca_id`)
);
// 首頁:獲取頂層分類
public function index() {
$cate = M('cate')->where(['ca_pid' => 0])->select();
$this->assign('cate', $cate);
$this->display();
}
// Ajax 介面:獲取子分類
public function getChildren() {
$pid = I('post.pid', 0, 'intval');
$list = M('cate')->where(['ca_pid' => $pid])->field('ca_id,ca_name')->select();
$this->ajaxReturn($list, 'JSON');
}
<select id="cate1" name="cate1">
<option value="">請選擇一級分類</option>
<volist name="cate" id="v">
<option value="{$v.ca_id}">{$v.ca_name}</option>
</volist>
</select>
<select id="cate2" name="cate2" disabled>
<option value="">請先選擇一級分類</option>
</select>
<script src="/Public/js/jquery.min.js"></script>
<script>
$('#cate1').on('change', function() {
var pid = $(this).val();
$('#cate2').prop('disabled', true).html('<option>載入中...</option>');
if (!pid) {
$('#cate2').html('<option>請先選擇一級分類</option>');
return;
}
$.post('__APP__/Index/getChildren', {pid: pid}, function(data) {
var html = '<option value="">請選擇二級分類</option>';
$.each(data, function(i, v) {
html += '<option value="' + v.ca_id + '">' + v.ca_name + '</option>';
});
$('#cate2').prop('disabled', false).html(html);
}, 'json');
});
</script>
I('post.pid'):ThinkPHP 安全輸入獲取,自動過濾。ajaxReturn():自動設置 Content-Type: application/json 並 exit。change 事件比 click 更合適(鍵盤操作也會觸發)。.fail() 處理)。// 無框架時
$pdo = new PDO(...);
$stmt = $pdo->prepare('SELECT ca_id, ca_name FROM cate WHERE ca_pid = ?');
$stmt->execute([$_POST['pid']]);
header('Content-Type: application/json');
echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
同理新增 cate3,監聽 cate2 的 change 事件,傳遞 ca_pid 為 cate2 的值即可。