您的位置:首页 > Web前端 > AngularJS

解决PHP无法通过$_POST接收到AngularJS的post数据的解决方法

2016-04-27 17:59 716 查看
在使用AngularJS $http.post()的时候,PHP如果通过$_POST来获取值,那么它获取到的将会是空值。而如果是用jquery来进行post传递,却不会这个问题。这是为什么呢?这是因为两者的post对header的处理有所不同。jQuery会把作为JSON对象的myData序列化,而AngularJS不会,所以PHP无法接受到这个值。而解决这个问题的方式有三种:

  第一种:引入jquery,以此代替AngularJS。(不推荐)

  第二种:在服务器端(PHP)通过 $params = json_decode(file_get_contents('php://input'),true); 获取参数,需要一个一个改,效率低下,后期维护问题也大。(不推荐)

  第三种:修改Angular的$httpProvider的默认处理方式,具体操作如下:



1 var app = angular.module('myApp', []);

//主要是添加以下红色字体代码
2      app.config(function($httpProvider){
3          $httpProvider.defaults.transformRequest=function(obj){
4              var str=[];
5              for(var p in obj){
6                  str.push(encodeURIComponent(p)+"="+encodeURIComponent(obj[p]));
7              }
8              return str.join("&");
9          };
10          $httpProvider.defaults.headers.post={
11              'Content-Type':'application/x-www-form-urlencoded'
12          }
13
14      })
15      app.controller('myController',function($scope,$http){
16          var data={name:123,mess:321}
17          $http({
18              url:'1.php',
19              method:'POST',
20              data:{
21                  'name':'tom',
22                  'work':'boss'
23              }
24          }).success(function(data){
25              console.log(data)
26          }).error(function(){
27              console.log('error')
28          })
29
30          $.ajax({
31              url:'1.php',
32              type:'post'
33          })
34
35      })
36      angular.bootstrap(document.documentElement,['myApp'])


  也可以在$http.post()中修改$httpProvider,具体操作如下:



1      var app = angular.module('myApp', []);
2      app.controller('myController',function($scope,$http){
3          var data={name:123,mess:321}
4          $http({
5              url:'1.php',
6              method:'POST',
7              data:{
8                  'name':'tom',
9                  'work':'boss'
10              },
11              headers:{'Content-Type':'application/x-www-form-urlencoded'},
12              transformRequest:function(obj){
13                  var str=[];
14                  for(var p in obj){
15                      str.push(encodeURIComponent(p)+"="+encodeURIComponent(obj[p]));
16                  }
17                  return str.join("&");
18              }
19          }).success(function(data){
20              console.log(data)
21          }).error(function(){
22              console.log('error')
23          })
24
25          $.ajax({
26              url:'1.php',
27              type:'post'
28          })
29
30      })
31      angular.bootstrap(document.documentElement,['myApp'])


  这样子就可以解决PHP无法通过$_POST接受到值得问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: