Heim  >  Artikel  >  Backend-Entwicklung  >  thinkphp的Ajax实现原理

thinkphp的Ajax实现原理

WBOY
WBOYOriginal
2016-08-04 09:21:241098Durchsuche

学习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请求数据在项目里经常用到,可以自己封装一下方法,比如我用的方式:

<code>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;
  }</code>

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

js中ajax请求:

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

$this->ajaxReturn($data);

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

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

不错不错!学习了!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn