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