为什么angular仍然将请求编码为JSON? ($ http,$ httpParamSerializerJQLike)

时间:2015-08-31 21:28:56

标签: javascript ajax angularjs http

我希望能够突出显示x-www-form-urlencoded请求默认。不是JSON。

angular 1.4.5

这不起作用。

 angular.module('APP').config(['$httpProvider', function ($httpProvider) {
        $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded';
        $httpProvider.defaults.headers.post['Content-Type'] =  'application/x-www-form-urlencoded';
        $httpProvider.defaults.paramSerializer = '$httpParamSerializerJQLike';
    }]);

即使我在之后添加:

angular.module('APP').run(['$http', '$httpParamSerializerJQLike', function($http, $httpParamSerializerJQLike) {
  $http.defaults.paramSerializer = $httpParamSerializerJQLike;
}]);

但是当我在发出请求时直接在服务/控制器中使用它时工作。 为:

$http.post('/auth', $httpParamSerializerJQLike({email: email, pwd: pwd}))
.then(...

现在我使用这个拦截器:(错误的代码,方式,但按我的意愿工作)

angular.module('APP').factory('ApiInterceptor', ['$q', '$httpParamSerializerJQLike',
function($q, $httpParamSerializerJQLike){
  return {
    request: function (config) {
      $rootScope.loading = true;
      if (config.method === "POST"){
        if (config.data === undefined) config.data = {};
        config.data = $httpParamSerializerJQLike(config.data);
      }
      return config || $q.when(config);
    }
  };
}]);

如何将整个应用程序配置为使用x-www-form-urlencoded而不使用自行车作为$.param拦截器等。

1 个答案:

答案 0 :(得分:1)

defaults.paramSerializer仅用于构建网址,而不是POST正文,defaults.transformRequest是您正在寻找的内容