架構圖解
PHP 後端 (json.php) → JSONP 響應 → jQuery.getJSON → zy_tmpl 模板渲染 → #lc 下拉框更新
後端 PHP 生成 JSONP
1, 'BuildingName' => 'A棟'],
['BuildingId' => 2, 'BuildingName' => 'B棟'],
['BuildingId' => 3, 'BuildingName' => 'C棟'],
];
header('Content-Type: application/javascript');
echo $_GET['jsoncallback'] . '(' . json_encode($res) . ');';
前端模板結構 (AppCan 風格)
JS 渲染邏輯
function getlq() {
$.getJSON('https://localhost/json.php?jsoncallback=?', function(data) {
// zy_tmpl 語法:${字段名} 對應數組對象屬性
var tmpl = '';
$("#lc").html(""); // 清空 loading 選項
// zy_tmpl(tmpl, data, count) 批量渲染
$("#lc").append(zy_tmpl(tmpl, data, zy_tmpl_count(data)));
});
}
// 頁面載入自動執行
$(function() { getlq(); });
zy_tmpl 關鍵點
- 語法:`${property}` 直接映射 JSON 對象屬性,支援嵌套 `${user.name}`。
- 批量渲染:第三參數 `count` 指定渲染條數,內部循環拼接字符串,比手動 `$.each` 追加快。
- AppCan 集成:`zy_slectmenu(id)` 刷新原生選單 UI,確保樣式生效。
現代替代方案對比
| 方案 | 優點 | 缺點 |
| zy_tmpl (原文) | 輕量、AppCan 內置、語法簡單 | 不維護、功能弱、無條件/循環邏輯 |
| template.js / artTemplate | 語法豐富、預編譯快、社區活躍 | 需額外引入 |
| Vue/React 組件 | 響應式、生態完善、TypeScript 支援 | 引入成本高、非輕量頁面過重 |
| 原生 JS 模板字符串 | 零依賴、ES6+ 原生、樹搖優化 | 舊瀏覽器需轉譯 |
避坑指南
- JSONP 回調參數名:jQuery 默認 `callback`,PHP 需讀取 `$_GET['callback']` 或統一約定 `jsoncallback`。
- 跨域 HTTPS 混合內容:頁面 HTTPS 時接口必須 HTTPS,否則瀏覽器攔截。
- 選項值類型:`