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

在使用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接受到值得问题了。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值