AngularJS设置请求头headers

设置headers的三种方式:

1.调用$http()方法时

$http({
    method: 'POST',
    data: {},
    url: server.url,
    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 的形式提交的,而 AngularJs 以 json 格式提交的,所以后端获取不到。

  • 改后端,以参数的形式接收,不使用 FormCollection 或 Request.Form[]
  • 改 AngularJs 提交数据的方式,使用 全局配置 配置 $httpProvider 的 header 值,使用 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;
            };
        }]);

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值