【場景描述】:展示型企業站制作管理后台,前端框架:vue.js2.0,bootstrap,后台語言:php
【問題描述】:使用管理后台向接口發送請求時,接口使用PHP的$_POST['args'],接收提交的字段;在使用原始的表單submit,后台能夠正常接收到提交的字段。但是使用vue或者angularjs等js框架提交時,由於提交的是JSON格式的字段,使用$_POST[]是接收不到的;
【解決方案】:
PHP接收JSON格式的數據 在API服務中,目前流行采用json形式來交互。
給前端調用的接口輸出Json數據,這個比較簡單,只需要組織好數據,用json_encode($array) 轉化一下,前端就得到json格式的數據。
接收前端提交的json數據稍微復雜一點,原因是:PHP默認識別的數據類型是application/x-www.form-urlencoded標准的數據類型。因此,對型如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-www.form-urlencoded標准的數據類型。
