AngularJS向PHP頁面POST數據時,無法接收的問題
入坑情景
在使用$http向PHP頁面POST數據時,從頁面中接收,無論怎么都是空,以下是部分代碼:
$http.post("http://localhost:8080/index.php?action=findTeam",{teamname:$scope.teamName,type:type}).success(function (data) {
if(data.code===1000){
$scope.callText="正常返回";
$scope.isCall=true;
}else{
$scope.callText="非正常返回";
$scope.isCall=false;
}
});
在PHP頁面:
通過$POST['teamname']和$POST['type']取值時一直都是空。通過查閱資料,得知:
在使用AngularJS $http.post()的時候,PHP如果通過$_POST來獲取值,那么它獲取到的將會是空值。而如果是用jquery來進行post傳遞,卻不會這個問題。這是為什么呢?這是因為兩者的post對header的處理有所不同。jQuery會把作為JSON對象的myData序列化,而AngularJS不會,所以PHP無法接受到這個值。
怎么解決呢?高手給出以下3點:
1.引入jquery,以此代替AngularJS。(不推薦);
2.在服務器端(PHP)通過 $params = json_decode(file_get_contents('php://input'),true); 獲取參數,需要一個一個改,效率低下,后期維護問題也大。(不推薦);
3.修改Angular的$httpProvider的默認處理方式
高手推薦使用第3種方式:
在配置module時,加入以下代碼:
app.config(function($httpProvider) {
$httpProvider.defaults.transformRequest = function(obj) {
var str = [];
for (var p in obj) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
};
$httpProvider.defaults.headers.post = {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
以上代碼在使用時應注意:如果采用了代碼壓縮,代碼中的function內參數應該以數組的方式引入。