问题直接调用$http.post()方法时


传值格式是这样的


php接收端接收到的是json格式的,怎么做的跟Ajax post那样传值呢?


 


分析原因,angular的$http.post()方法默认数据传输格式是json的



      post: {'Content-Type': 'application/json;charset=utf-8'},


      put:  {'Content-Type': 'application/json;charset=utf-8'}


所以要修改传输格式


 


解决方法如下


在angular模块中加入




//修改post方式 form格式传值


angular.module('MyModule', [], function($httpProvider) {//MyModule是你自己的app名称


  // Use x-www-form-urlencoded Content-Type


  $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';


  $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';


 


   


  var param = function(obj) {


    var query = '', name, value, fullSubName, subName, subValue, innerObj, i;


      


    for(name in obj) {


      value = obj[name];


        


      if(value instanceof Array) {


        for(i=0; i


          subValue = value[i];


          fullSubName = name + '[' + i + ']';


          innerObj = {};


          innerObj[fullSubName] = subValue;


          query += param(innerObj) + '&';


        }


      }


      else if(value instanceof Object) {


        for(subName in value) {


          subValue = value[subName];


          fullSubName = name + '[' + subName + ']';


          innerObj = {};


          innerObj[fullSubName] = subValue;


          query += param(innerObj) + '&';


        }


      }


      else if(value !== undefined && value !== null)


        query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';


    }


      


    return query.length ? query.substr(0, query.length - 1) : query;


  };


 


  // Override $http service's default transformRequest


  $httpProvider.defaults.transformRequest = [function(data) {


    return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;


  }];


});