>[warning] 已废弃之前的直接将 json 格式数据 exit 出来,遵循官方推荐使用 \think\Response::create() 方法进行数据返回
## json 数据返回
由于前端 ajax 请求回调的刷新、重定向、其他回调都是后台严格的 json 数据返回控制,请安装规范返回规定的 json 数据,框架已经给封装了四个常用 json 数据方法方法
###ajax_return
这个为标准规范格式的 json 数据返回,其他所有的 json 数据返回全部以这个为基础进行封装,如果需要添加其他参数,可以在 `$extend` 中自行扩展
```
/**
* ajax数据返回,规范格式
* @param array $data 返回的数据,默认空数组
* @param string $msg 信息
* @param int $code 错误码,0-未出现错误|其他出现错误
* @param array $extend 扩展数据
*/
function ajax_return($data = [], $msg = "", $code = 0, $extend = [])
{
$ret = ["code" => $code, "msg" => $msg, "data" => $data];
$ret = array_merge($ret, $extend);
return Response::create($ret, 'json');
}
```
###ajax_return_error
快速返回一条标准的包含错误信息的 json 数据
```
/**
* 返回标准错误json信息
*/
function ajax_return_error($msg = "出现错误", $code = 1, $data = [], $extend = [])
{
return ajax_return($data, $msg, $code, $extend);
}
```
###ajax_return_adv
框架中几乎所有的操作全部由此方法返回 json 数据,用于控制前端页面处理
```
/**
* 框架内部默认ajax返回
* @param string $msg 提示信息
* @param string $redirect 重定向类型 current|parent|''
* @param string $alert 父层弹框信息
* @param bool $close 是否关闭当前层
* @param string $url 重定向地址
* @param string $data 附加数据
* @param int $code 错误码
* @param array $extend 扩展数据
*/
function ajax_return_adv($msg = '操作成功', $redirect = 'parent', $alert = '', $close = false, $url = '', $data = '', $code = 0, $extend = [])
{
$extend['opt'] = [
'alert' => $alert,
'close' => $close,
'redirect' => $redirect,
'url' => $url,
];
return ajax_return($data, $msg, $code, $extend);
}
```
下面是其中参数的使用说明
| 参数名称 | 类型 | 使用说明 |
| --- | --- | --- |
| msg | string | 提示信息,`code` 为 0 时信息使用 `layer.msg` 显示,3 秒自动消失,`code` 不为 0 时使用 `layer.alert` 显示,需手动关闭提示信息 |
| redirect | enum | 重定向选项,`current`:当前页重定向到 `url` 地址,`url` 为空刷新当前页;`parent`:父层页重定向到 `url` 地址,`url` 为空刷新父层,并且关闭当前层;为空,不执行重定向 |
| alert | string | alert 出信息, 为空不 alert |
| close | bool | 是否关闭当前层,true 关闭,false 不关闭 |
| url | string | 重定向的链接,请参考 redirect 用法 |
| data | mixed | 需返回的数据,格式根据自己需要而定,只要能转化为 json 就行 |
| code | int | 错误码,0:成功,其他:错误 |
| extend | array | 扩展数据,在 code、msg、data、opt 这个层级添加自己需要的数据 |
关于此方法的具体使用可以参考下面 `javascript` 代码
```
/**
* 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});
}
}
```
###ajax_return_adv_error
快速返回一条错误信息
```
/**
* 返回错误json信息
*/
function ajax_return_adv_error($msg = '', $code = 1, $redirect = '', $alert = '', $close = false, $url = '', $data = '', $extend = [])
{
return ajax_return_adv($msg, $alert, $close, $redirect, $url, $data, $code, $extend);
}
```
##带 return 返回
如果调用的方法是最后使用 return 返回的,可以直接使用 return 返回数据
###返回 json 格式数据
例如 `return ajax_return_adv('操作成功')` , `return ajax_return_adv_error('操作失败')` , `return \think\Response::create($data, 'json')`
###返回文本数据(不带HTML)
例如 `return '我是纯文本'`, `return \think\Response::create('我是纯文本')`
###返回文本数据(带HTML)
如果直接使用 `return` 返回数据的话,会对 HTML 进行 `htmlspecialcode` 编码,为了不被编码,只能采取 `return \think\Response::create('<h1>我不是被编码</h1>')`
##不带 return 返回
我们经常会用到一些过滤器,有时需要在过滤里直接返回数据,这时如果使用 `return` 就很不方便了,这时可以使用 `\think\Response()` 和 `HttpResponseException` 异常类,抛出异常即可
###返回 json 格式数据
例如 `throw new HttpResponseException(ajax_return_adv_error("登录超时,请先登陆", 400))`
###返回文本数据
例如 `throw new HttpResponseException(new Response('文本'));`
##Url 重定向
不需要引入 traits `\traits\controller\Jump`,直接使用:`throw new HttpResponseException(new Redirect('Pub/login'));`
- 概要
- 开始使用
- 写在前面
- 目录结构
- 模板主题支持
- 前置方法before支持
- 数据返回
- 异常接管
- Rbac 权限管理
- 开始使用
- 用户管理
- 分组管理
- 节点管理
- 角色管理
- 使用流程
- 其他
- 代码自动生成 v1.2
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 示例三 - 从数据表生成
- 示例四 - 指定生成的文件
- 示例五 - 命令行模式
- 示例六 - 模拟命令行模式
- 代码自动生成
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 控制器
- 公共控制器
- traits 多继承 Controller
- 公开不授权控制器
- 其他控制器
- 标签扩展
- 模板
- 网站操作日志
- 节点图
- 行为驱动
- 其他后端方法
- Excel一键导出
- Excel一键导入
- 文件下载
- 邮件发送
- 七牛文件上传
- id加密
- 前端
- ajax请求
- 表单校验
- 丰富弹层
- 异步操作
- 表格溢出
- 随机字符串
- 自动面包屑导航
- 动态加载文件
- 文件上传
- Tab 切换
- 图片预览
- 二维码生成
- 日历组件
- 升级指导
- 更新日志
- FAQ