tpadmin 管理后臺大部分的請求都是 ajax 請求,返回的 json 數據大部分是通過一個 `ajax_progress` 方法處理
詳細返回的 json 數據格式要求見 [數據返回](225019)
##后臺返回數據格式要求
| 參數名稱 | 類型 | 使用說明 |
| --- | --- | --- |
| msg | string | 提示信息,`code` 為 0 時信息使用 `layer.msg` 顯示,3 秒自動消失,`code` 不為 0 時使用 `layer.alert` 顯示,需手動關閉提示信息 |
| redirect | enum | 重定向選項,`curren`:當前頁重定向到 `url` 地址,`url` 為空刷新當前頁;`parent`:父層頁重定向到 `url` 地址,`url` 為空刷新父層,并且關閉當前層;為空,不執行重定向 |
| alert | string | alert 出信息, 為空不 alert |
| close | bool | 是否關閉當前層,true 關閉,false 不關閉 |
| url | string | 重定向的鏈接,請參考 redirect 用法 |
| data | mixed | 需返回的數據,格式根據自己需要而定,只要能轉化為 json 就行 |
| code | int | 錯誤碼,0:成功,其他:錯誤 |
##前端數據處理
```
/**
* ajax 處理,對應服務端 ajax_return_adv 方法返回的 json 數據處理
* @param data ajax返回數據
* @param callback 成功回調函數
* @param param 回調參數
*/
function ajax_progress(data, callback, param) {
if (data.code == 0) {
if (typeof data.opt == "object") {
var index = parent.layer.getFrameIndex(window.name);
if (data.opt.close) {
parent.layer.close(index);
}
if (data.opt.redirect == 'current') {
// 當前頁重定向
if (!data.opt.url) {
// 刷新
window.location.reload();
} else {
// 重定向到 url
window.location.href = data.opt.url;
}
} else if (data.opt.redirect == 'parent') {
// 父層重定向
if (!data.opt.url) {
// 刷新
window.parent.location.reload();
} else {
// 重定向到 url
window.parent.location.href = data.opt.url;
}
// 關閉當前層
parent.layer.close(index);
}
// 父層彈出信息
if (data.opt.alert) {
parent.layer.alert(data.opt.alert);
parent.layer.close(index);
}
if (!data.opt.close && !data.opt.redirect && !data.opt.alert) {
parent.layer.msg(data.msg);
parent.layer.close(index);
}
} else {
layer.msg(data.msg);
}
if (typeof callback == "function") {
if (typeof param != "undefined") {
param.unshift(data)
} else {
param = [data];
}
callback.apply(this, param);
}
} else {
layer.alert(data.msg, {title: "錯誤信息", icon: 2});
}
}
```
##使用示例
###直接使用
```
$("#form").Validform({
tiptype: 2,
ajaxPost: true,
showAllError: true,
callback: function (ret) {
ajax_progress(ret);
}
});
```
###配合 ajax_req 使用
```
// 恢復、禁用使用 ajax_req 發送請求,使用 ajax_progress 處理請求,使用回調函數 change_status 動態改變狀態
<a href="javascript:;" onclick="ajax_req('/admin/admin_node/forbid/id/1.html',{},change_status,[this,'forbid'])" class="label label-warning radius" title="點擊禁用">禁用</a>
/**
* 操作對象發送ajax請求
* @param url 請求地址
* @param data 請求參數
* @param callback 成功回調
* @param param 回調參數
* @param shade 是否遮罩
*/
function ajax_req(url,data,callback,param,shade){
if(shade === true) var loading = layer.load(2);
$.post(url,data,function(ret){
shade === true || layer.close(loading);
ajax_progress(ret,callback,param);
},'json')
}
/**
* 恢復禁用等狀態改變回調函數
* @param ret
* @param obj
* @param type
*/
function change_status(ret, obj, type) {
//配置數據,TYPE:['下一狀態文字描述','當前狀態class顏色','下一狀態class顏色','下一狀態方法名','狀態標簽選擇器','下一狀態標簽icon','下一狀態標簽title']
var data = {
'resume':['禁用','success','warning','forbid','.status','','正常'],
'forbid':['恢復','warning','success','resume','.status','','禁用'],
};
var $this = $(obj);
$this.html(data[type][0]).attr("title","點擊"+data[type][0]).removeClass("label-"+data[type][1]).addClass("label-"+data[type][2]).attr("onclick",$this.attr("onclick").replace(new RegExp(type,'g'),data[type][3]));
$this.parents("tr").find(data[type][4]).html(data[type][5]).removeClass("c-"+data[type][2]).addClass("c-"+data[type][1]).attr("title",data[type][6]);
}
```
- 概要
- 開始使用
- 寫在前面
- 目錄結構
- 模板主題支持
- 前置方法before支持
- 數據返回
- 異常接管
- Rbac 權限管理
- 開始使用
- 用戶管理
- 分組管理
- 節點管理
- 角色管理
- 使用流程
- 其他
- 代碼自動生成 v1.2
- 示例一 - 一級控制器
- 示例二 - 多級控制器
- 示例三 - 從數據表生成
- 示例四 - 指定生成的文件
- 示例五 - 命令行模式
- 示例六 - 模擬命令行模式
- 代碼自動生成
- 示例一 - 一級控制器
- 示例二 - 多級控制器
- 控制器
- 公共控制器
- traits 多繼承 Controller
- 公開不授權控制器
- 其他控制器
- 標簽擴展
- 模板
- 網站操作日志
- 節點圖
- 行為驅動
- 其他后端方法
- Excel一鍵導出
- Excel一鍵導入
- 文件下載
- 郵件發送
- 七牛文件上傳
- id加密
- 前端
- ajax請求
- 表單校驗
- 豐富彈層
- 異步操作
- 表格溢出
- 隨機字符串
- 自動面包屑導航
- 動態加載文件
- 文件上傳
- Tab 切換
- 圖片預覽
- 二維碼生成
- 日歷組件
- 升級指導
- 更新日志
- FAQ