首頁  >  文章  >  後端開發  >  thinkphp的Ajax實作原理

thinkphp的Ajax實作原理

WBOY
WBOY原創
2016-08-04 09:21:241098瀏覽

學習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);

不錯不錯!學習了!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn