[前后端分離項目]thinkphp返回給前端數據為字符串


寫在前面:現在項目大多是采用前后端分離的模式進行開發,這種模式下的開發大大的提高了工作效率,而進行前后端數據交互傳輸的格式基本以json為主,畢業設計中兼顧前端開發和后端開發(后端小白一個),前端業務完成后采用模塊的后端開發,既能夠理清楚開發過程中的流程,同時也給自己提供一個簡單的邏輯思路優化邏輯,在這個過程中,考慮后端如何傳遞給前端json數據。開啟json旅程(個人實驗過程結果,有不合適的地方可以指出

1.思想一:后端傳遞給前端json,直接json_encode($arr)??

貼后端代碼:

  public function login(){  
       //判斷是否賦值
      if(isset($_POST['stu_number']) && isset($_POST['pwd'])){
         $useAccount = $_POST['stu_number'];
         $password = $_POST['pwd'];
         session('stu_number',$useAccount);  
       } else{
        $arr = array('status'=>0,'msg'=>'輸入賬號和密碼'); 
          return json_encode($arr);
       }
//省略驗證邏輯步驟
            $arr = array('status'=>1,'msg'=>'驗證成功');
           return json_encode($arr);
    }

 ※ 在瀏覽器端直接用接口進行訪問:發現接口直接返回的是json串 ,如圖1

  圖1 直接用接口進行訪問的后端返回數據格式

※在前端請求該接口返回的數據,如圖2,瀏覽的是webapp 返回的數據是一個字符串,利用cordova打包的apk進行訪問接口時數據格式如圖3;

 

圖2 在webapp 前端獲取到數據

圖3 在apk端訪問時獲取到數據

咦,驚呆了,在webapp和打包生成的apk 同一接口返回的數據格式竟然不一樣,這與我們想要的不符合,我們在webapp瀏覽模式下需要將后端返回的數據轉換成json數據格式,代碼如下:

var data = JSON.parse(response.data);//將后端返回的數據直接用方法轉

 在apk端訪問接口數據就不用 JSON.parse(response.data),而在hybirdapp項目中,通常是將webapp打包成apk模式,這樣接口提供的數據就不統一,為打包帶來繁瑣的步驟;如果單純的在webapp中,可以利用json進行需要的邏輯判斷了,如果項目n多接口,n多請求,每個接口都要進行處理,未免不是一種開銷,所以是比較繁瑣的了。記起來自己曾經做過的一個項目,后端返回的總是字符串,鑒於是網站,始終是以web形式打開,就沒細細再追究。

2:思想二,用json()進行輸出【采用的方法】

  后端代碼:

   $arr = array('status'=>1,'msg'=>'驗證成功');
           return json($arr);

   通過驗證:😋無論是用接口訪問、還是web端訪問、還是打包成apk進行訪問,返回的都是一個json串,

3: 思想三,利用echo進行輸出

后端接口訪問: echo貌似解決不了問題,echo返回單個數據還ok, 

   echo json_encode($arr);

  

前端接收到數據:

這樣前端也能夠接收到一個json數據,【此處未驗證打包后的apk是否能夠接收json,】echo是輸出字符串到瀏覽器,return是終止后面代碼的執行並返回一個值。如果echo后面還有返回,可能會多余返回,還要在echo后面加上return,但如果出現函數嵌套或者函數比較多的情況,echo會無效或者發生錯誤。所以處理函數的返回或者輸出還是用return好。😨還是很麻煩的事情的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM