设置headers的三种方式:

1.调用$http()方法时

$http({
    method: 'POST',
    data: {},
    url: server.queryContractInfo,
    headers: {//这里设置哈
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
        'Accept':'*/*'
    }
}).success(function(d) {
    $log.log(d);
}).error(function(d) {
    $log.log(d)
});

2. 在$httpProvider.defaults.headers属性上直接配置

angular
.module('app', [])
.config(function($httpProvider) {
    //删除后请求头里不再有 Content-Type 属性
    delete $httpProvider.defaults.headers.common['Content-Type'];
    
    $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
    $httpProvider.defaults.headers.post["Accept"] = "*/*";
})

$httpProvider.defaults.headers 有不同的属性,如 common、get、post、put 等。因此可以在不同的 http 请求上面添加不同的头信息,common 是指所有的请求方式。
这种方式添加请求头信息的优势就是可以给不同请求方式添加相同的请求头信息,缺点就是不能够为某些请求path添加个性化头信息。

3. $httpProvider.interceptors 也就是为请求或相应注册一个拦截器

使用这这方式我们首先需要定义一个服务

angular
.module('app', [])
.factory('authInterceptor', function($rootScope,  $cookies){
    return {
        request: function(config){
            config.headers = config.headers || {};
            if($cookies.get('token')){
                config.headers.authorization = 'Bearer ' + $cookies.get('token');
            }
            return config;
        },
        responseError: function(response){
            // ...
        }
    };
})

然后把上面定义的服务注册到$httpProvider.interceptors中。

angular
.module('app', [])
.config(function($httpProvider){
    $httpProvider.interceptors.push('authInterceptor');
})

这样,对于每次请求,不论是get还是post、put。我们都会在请求头信息中加入authorization属性。这种方式在处理验权、授权方面很有用的。


后端获取不到前端提交的数据的两种解决方法

jquery的post 提交方式是以 form-data 的形式提交的,而 AngularJsjson 格式提交的,所以后端获取不到。

  • 改后端,以参数的形式接收,不使用 FormCollectionRequest.Form[]
  • AngularJs 提交数据的方式,使用 全局配置 配置 $httpProviderheader 值,使用 transformRequest 对提交数据进行序列化,把 json 对象更改为字符串。
angular
.module("app", [])
    .config(["$httpProvider", function ($httpProvider) {
        //更改 Content-Type
        $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
        $httpProvider.defaults.headers.post["Accept"] = "*/*";
        $httpProvider.defaults.transformRequest = function (data) {
            //把JSON数据转换成字符串形式
            if (data !== undefined) {
                return $.param(data);
            }
            return data;
        };
    }]);