ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
>[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'));`