angular使用http服務post到PHP服務器無法接收參數的問題

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內參數應該以數組的方式引入。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容