A fool with a tool is still a fool but more powerful!

—— unknow

angularjs http post 数据格式处理

2015-22-07

既然分享 angularjs那就提供一个post data格式的解决办法。我想你刚接触到restfull的时候 一定纠结过post数据的格式,倒是用x-www-form-urlencoded 还是raw.如果用的raw,恭喜你。 angularjs,backbone etc. 大多数js框架都是默认这个格式。如果不是?那就要全局处理了。 这里给你提供angularjs的解决办法: 代码如下:


config(['$httpProvider', function($httpProvider) {
  //设置 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'
  };

  //post数据格式化
  $httpProvider.defaults.transformRequest = function(data) {
      var param = function(obj) {
          var query = '';
          var name, value, fullSubName, subName, subValue, innerObj, i;
          for (name in obj) {
              value = obj[name];
              if (value instanceof Array) {
                  for (i = 0; i < value.length; ++i) {
                      subValue = value[i];
                      fullSubName = name;
                      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;
      };
      return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
  };
}]);

这样不论是$http 还是$resource中的postput 请求都变成了 x-www-form-urlencoded 格式。