寫在前面:現在項目大多是采用前后端分離的模式進行開發,這種模式下的開發大大的提高了工作效率,而進行前后端數據交互傳輸的格式基本以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好。😨還是很麻煩的事情的。