本文目錄一覽:
如何用php調用外部接口json數據
一般使用php發送請求,獲取返回的數據,進行解析;
?php
$url=”接口地址”;
//發送請求獲取返回值,file_get_contents只支持get請求,post使用curl
$json = file_get_contents($url);
//把json數據轉化成數組
$data = json_decode($json,true);
//打印看看
print_r($data);
?
php如何接收js傳來的json
感覺樓主對json_decode這個函數有點理解錯誤,這個函數時將一個json格式的字符串轉化成php數組用的,前提是其中的參數必須為字符串
那我們回頭看下樓主的代碼,經過eval以後jsondata變成了一個數組形變量,結構似乎有點奇怪,有5個元素的一個數組,但是每個元素又是一個json對象,而每個json對象又只有一個變量。換句話說如果想獲取createvote這個值,那麼就需要調用jsondata[0].doing
而且,post發送的數據要求是json對象,而樓主這個根本就是不是json…能否發送都是個問題…
樓上那個說$_POST獲取數據的,我試了一下,似乎不行。$_POST[‘doing’]壓根就是個未定義的值
如果要json_decode那就沒必要先eval一下,感覺會弄巧成拙
給樓主一個代碼
js:
var data='{“doing”:”createvote”,”type”:”type”,”num”:”num”,”votetheme”:”votetheme”,”creater”:”loginname”}’;
$.post(url, {data:data}, function(res) {alert(res)});
注意data變量,‘與“的位置,不要寫反,反了的話json_decode是不能編譯的
php:
?php
if(isset($_POST[“data”]))var_dump(json_decode($_POST[“data”], true));
?
根據返回的格式很明顯就是一個php的array格式
post的參數必須是name-value的格式,如果單純post一個變量,那麼就相當於只有value,沒有name,所以我這裡將post的傳參值寫為{data:data}第一個data是name,第二個data是之前定義的字符串
php怎樣接收整個json數組
PHP接收JSON格式的數據
在API服務中,目前流行採用json形式來交互。
給前端調用的接口輸出Json數據,這個比較簡單,只需要組織好數據,用json_encode($array) 轉化一下,前端就得到json格式的數據。
接收前端提交的json數據稍微複雜一點,原因是:PHP默認識別的數據類型是application/x-標準的數據類型。因此,對型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之類的內容無法解析,如果用$_POST數組來接收就會失敗!
此時可以使用$GLOBALS[‘HTTP_RAW_POST_DATA’] 或 file_get_contents(‘php://input’) 來獲取提交的數據
查看手冊,可以發現$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST的區別:
$_POST:通過 HTTP POST 方法傳遞的變量組成的數組,是自動全局變量。
$GLOBALS[‘HTTP_RAW_POST_DATA’] :總是產生 $HTTP_RAW_POST_DATA 變量包含有原始的 POST 數據。此變量僅在碰到未識別 MIME 類型的數據時產生。$HTTP_RAW_POST_DATA 對於 enctype=”multipart/form-data” 表單數據不可用。也就是說基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是一樣的。但是如果post過來的數據不是PHP能夠識別的,你可以用 $GLOBALS[‘HTTP_RAW_POST_DATA’]來接收,比如 text/xml 或者 soap 等等。
補充說明:PHP默認識別的數據類型是application/x-標準的數據類型。
原創文章,作者:ZGCD,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140058.html