隨著web應用程序的普及,ajax技術的使用越來越廣泛。在處理前端與后端數據交互時,json(javascript對象表示)是一種流行的數據格式。在thinkphp5框架中,json操作非常簡單,本文將介紹如何使用thinkphp5中的json方法。
- Json操作簡介
在PHP中,將數組轉換為JSON格式的數據只需要使用json_encode函數即可。
$data = array('a' => 1, 'b' => 2, 'c' => 3); echo json_encode($data); // {"a":1,"b":2,"c":3}
通過json_decode函數則可以將JSON格式的數據轉換為數組:
$json_data = '{"a":1,"b":2,"c":3}'; $data = json_decode($json_data, true); print_r($data); // Array ( [a] => 1 [b] => 2 [c] => 3 )
在ThinkPHP5框架中,JSON操作更加簡單,框架提供了Json類,可以方便地處理JSON數據,該類位于thinkresponseJson.php。
- Json類使用
Json類繼承自Response類,Response類是一個響應類的抽象父類,它的主要作用是將響應返回給客戶端。Json類的主要作用是將數據以JSON格式返回給客戶端。
立即學習“PHP免費學習筆記(深入)”;
我們可以通過以下方式創建Json實例:
use thinkresponseJson; $data = array('a' => 1, 'b' => 2, 'c' => 3); $json = new Json($data);
或者通過以下方式創建:
$json = json($data);
- Json方法介紹
Json類中提供了多個方法用于處理JSON數據,下面我們分別介紹一下。
(1)data方法
data方法用于設置要返回的數據。
$json = new Json(); $json->data($data);
或者:
$json->data($data)->code(200)->header(['Cache-control' => 'no-cache,must-revalidate'])->send();
(2)content方法
content方法用于設置要返回的數據的類型,比如application/json的Content-Type類型。
$json = new Json(); $json->content('application/json');
(3)jsonp方法
jsonp方法用于生成JSONP數據,它接受兩個參數,第一個參數為回調函數的名稱,第二個參數為要返回的數據。
$json = new Json(); $json->jsonp('callback', $data);
(4)code方法
code方法用于設置響應的狀態碼,比如200代表響應成功,404代表請求的資源不存在等。
$json = new Json(); $json->code(200);
(5)header方法
header方法用于設置響應頭信息。
$json = new Json(); $json->header(['Cache-control' => 'no-cache,must-revalidate']);
(6)options方法
options方法用于設置響應選項。
$json = new Json(); $json->options(['json_encode_param' => JSON_UNESCAPED_UNICODE]);
(7)send方法
send方法用于發送響應數據。
$json = new Json($data); $json->send();
- Json實例
下面通過一個實例來了解如何使用Json類。假設我們需要一個JSON API返回商品列表,每個商品都有ID和名稱兩個屬性。
首先是前端代碼:
$.ajax({ url: '/goods/list', dataType: 'jsonp', jsonp: 'callback', success: function(data) { if (data.code == 200) { $.each(data.data, function(index, item) { $('#goods-list').append('<li>' + item.id + ': ' + item.name + '</li>'); }); } else { alert('加載商品列表失敗:' + data.msg); } }, error: function(jqXHR, textStatus, errorThrown) { alert('加載商品列表失敗:' + textStatus); } });
然后在控制器Goods中添加一個list函數:
namespace appindexcontroller; use thinkresponseJson; class Goods { public function list() { // 模擬商品數據 $goods_list = array( array('id' => 1, 'name' => '商品1'), array('id' => 2, 'name' => '商品2'), array('id' => 3, 'name' => '商品3'), ); // 返回JSON數據 $json = json($goods_list); $jsonp_callback = input('get.callback'); if (!empty($jsonp_callback)) { $json->jsonp($jsonp_callback); } return $json; } }
最后,在路由中增加一個規則:
Route::get('/goods/list', 'index/Goods/list');
運行程序,訪問路徑/goods/list即可看到返回的JSON數據。
本文只是介紹了ThinkPHP5框架中Json類的一些基本使用方法,還有更多高級用法需要讀者自行探索。希望本文能為大家了解ThinkPHP5框架的JSON操作提供一些參考。