>[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