美文网首页
angular使用http服务post到PHP服务器无法接收参数

angular使用http服务post到PHP服务器无法接收参数

作者: 一长亭 | 来源:发表于2017-03-22 10:31 被阅读0次

    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内参数应该以数组的方式引入。

    相关文章

      网友评论

          本文标题:angular使用http服务post到PHP服务器无法接收参数

          本文链接:https://www.haomeiwen.com/subject/rytonttx.html