当前位置: 代码迷 >> 综合 >> thinkphp5 使用error() 和 success 方法以弹窗的方式弹出。
  详细解决方案

thinkphp5 使用error() 和 success 方法以弹窗的方式弹出。

热度:31   发布时间:2023-12-15 02:14:59.0

一、例如写一个登陆注册的程序,我们想给用户的提示是以弹窗的方式展示。

       

      1.1 在不做任何修改的情况下进行登陆操作是以下图这种方式展示的

      

    1.2 那么我们如果想以弹窗的方式展示如何做呢?(这是我的方式,当然可能有别的方法)。

    1.3 使用 ajax 提交数据。 这里使用layer的弹窗。 

前端js代码:

 

$('.btn-success').click(function () {$.post("{:url('login/check')}", $('.form-horizontal').serialize(), function (result) {if (result.code == 1) {layer.msg(result.msg, {icon: 1});}  else {layer.msg(result.msg, {icon: 5});}}, 'json');});

 后台代码:这里我们使用success就可以实现。

$this->success('登录成功');

   返回的效果,这不正是我们想要的效果吗?

  

 二、分析 (查看 TP5中succcess 的源代码)

 1、我们可以看到 success中有这样一段代码:

$type = $this->getResponseType();

   当我们使用原来的表单的方式提交的时候,我们输出 $type 可以看到 为html

   echo $type // html

     接着往下看,我们可以看到这段代码,这段代码的意思和上面输出的html一样,那么就会执行这段代码。

     最后的返回的 $result是一个html页面。

if ('html' == strtolower($type)) {$result = ViewTemplate::instance(Config::get('template'), Config::get('view_replace_str'))->fetch(Config::get('dispatch_success_tmpl'), $result);}

 

   

   再往下看可以看到thinkphp使用了 response 响应。

   通过上面的执行结果我们进入create() 方法看。下

$response = Response::create($result, $type)->header($header);

  这里我输出了$class 打印结果为 : \think\response\Html。

 public static function create($data = '', $type = '', $code = 200, array $header = [], $options = []){$type = empty($type) ? 'null' : strtolower($type);$class = false !== strpos($type, '\\') ? $type : '\\think\\response\\' . ucfirst($type);echo $class;die;if (class_exists($class)) {$response = new $class($data, $code, $header, $options);} else {$response = new static($data, $code, $header, $options);}return $response;}

 然而在thinkphp中没有 这个类,那么就会执行到 $response = new static($data, $code, $header, $options);,

 执行当前类。

  response中默认响应的格式为  

protected $contentType = 'text/html';

   那么我们就可以看到了,是以 text/html 的格式返回的,那么答案也就出来了。

  2、如果使用 ajax提交数据。

    echo $type; // json 

    那么在看到thinkphp中存在Json类,是以json格式返回的。答案也就出来了。

   

 

  返回的数据:

 {"code":1,"msg":"登录成功","data":"","url":"http:\/\/localhost\/tp5\/public\/admin\/login\/index.html?username=%E5%95%8A%E6%98%AF%E6%89%93%E7%AE%97%E6%89%93%E7%AE%97&password=asdas+","wait":3}

 有什么不懂的,或者有什么问题的,希望大家多多指导。

  相关解决方案