欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

thinkphp的Ajax实现原理

程序员文章站 2022-04-25 10:57:37
...

学习thinkphp框架Ajax(鉴于刚才太懒没有放代码,对所有的回答者说声对不起)
我的想法是:前台触发Ajax -->> 进入控制器 -->> 从数据库取数 -->> 直接返回前台处理数据
怎样可以不通过模板的渲染直接从控制器返回数据?
thinkphp的Ajax实现原理

thinkphp的Ajax实现原理

thinkphp的Ajax实现原理

问题应该出在$this->ajaxReturn();
我把ajaxReturn()删除,改用var_dump($data)
前台收到数据如下
thinkphp的Ajax实现原理

问题终于解决了,原因在于查出来的并不是一个json格式,ajaxReturn()传输的不是json格式,所以前台接收到的是array([0]=>array({})),所以也不能用$.parseJSON(data)解析,
改用$.each(data[0],function(i,n){})来解析数据
thinkphp的Ajax实现原理

回复内容:

学习thinkphp框架Ajax(鉴于刚才太懒没有放代码,对所有的回答者说声对不起)
我的想法是:前台触发Ajax -->> 进入控制器 -->> 从数据库取数 -->> 直接返回前台处理数据
怎样可以不通过模板的渲染直接从控制器返回数据?
thinkphp的Ajax实现原理

thinkphp的Ajax实现原理

thinkphp的Ajax实现原理

问题应该出在$this->ajaxReturn();
我把ajaxReturn()删除,改用var_dump($data)
前台收到数据如下
thinkphp的Ajax实现原理

问题终于解决了,原因在于查出来的并不是一个json格式,ajaxReturn()传输的不是json格式,所以前台接收到的是array([0]=>array({})),所以也不能用$.parseJSON(data)解析,
改用$.each(data[0],function(i,n){})来解析数据
thinkphp的Ajax实现原理

不是很懂你的意思,Ajax请求到后台获取数据之后通过前端模板引擎渲染到前台,怎么是“通过模板的渲染直接从控制器返回数据”?,返回数据还需要模板引擎吗?模板引擎的使用是避免拼接字符串,便于更好的处理ajax返回的数据。因为ajax请求数据在项目里经常用到,可以自己封装一下方法,比如我用的方式:

protected $msg;

 //返回数据失败
 protected function fail($mode=false,$type="json"){
    $this->msg['status'] = 'failure';
    if(true===$mode){
      $this->reply($type);
    }
  }
//返回数据成功
protected function succeed($mode=false,$type="json"){
    $this->msg['status'] = 'success';
    if(true===$mode){
      $this->reply($type);
    }
  }
//返回的数据
protected function setResult($result){
    $this->msg['result'] = $result;
  }
protected function reply($type="json"){
    if($type == 'string'){
      print_r($this->msg);
    }else{
      echo json_encode($this->msg);
    }
    exit;
  }

使用方法:
1.请求成功:
$this->setResult($data);
$this->succeed(true)
2.请求失败:
$this->setResult("请求失败") //可以不用写
$this->fail(true)

js中ajax请求:

$.post('',$data).done(function(rs){
        var rs = $.parseJSON(rs);
        if(rs.status == 'success') {
          var msg = rs.result;   //获取数据
         
        } else {
          //请求失败的处理
        }
      });

$this->ajaxReturn($data);

以前是
$this->assian('data', $data);
$this->display();

现在是
$this->ajaxReturn($data);

不错不错!学习了!

相关标签: php thinkphp