在CodeIgniter中,使用HTTP協(xié)議來傳遞數(shù)據(jù)非常方便,可以通過post方式發(fā)送數(shù)據(jù)并且也可以直接發(fā)送json數(shù)據(jù)。這里我們重點介紹一下如何通過post方式發(fā)送json數(shù)據(jù)。
首先在controller中,需要使用CodeIgniter的input類來獲得post提交的數(shù)據(jù)。具體操作可以參考下面的代碼:
$postdata = file_get_contents("php://input"); $request = json_decode($postdata);
以上代碼中,$postdata是一個字符串,可以通過file_get_contents函數(shù)來獲取HTTP請求中的數(shù)據(jù)。然后使用json_decode函數(shù)將$postdata轉(zhuǎn)換成一個對象或者數(shù)組。
接下來,我們就可以對$request進行處理,比如對其中的某些字段進行校驗、對數(shù)據(jù)庫進行操作等等。最后返回處理結(jié)果即可。
當(dāng)然,在發(fā)送post請求時,需要在請求頭中添加Content-Type,比如application/json,告訴服務(wù)器發(fā)送的是json格式的數(shù)據(jù)。例如:
$url = "http://example.com/api"; $data = array("name" =>"John", "age" =>30); $json_data = json_encode($data); $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($json_data)) ); $result = curl_exec($ch); curl_close($ch);
以上代碼中,通過curl庫發(fā)送了一個post請求,并且請求頭中添加了Content-Type和Content-Length頭信息。
總結(jié)來說,通過CodeIgniter發(fā)送post方式的json數(shù)據(jù)十分簡單,只需要在controller中使用input類獲得數(shù)據(jù)即可。在發(fā)送post請求時,需要注意請求頭中的Content-Type。