如何在jquery ajax成功中获得响应头授权?

时间:2016-10-21 09:21:21

标签: javascript jquery ajax

我在前端设置加密的用户名和密码授权,并从服务器获取请求标头响应承载授权。在ajax中我正确地在safari中获得响应头但在chrome和firefox中它就像一个null。问题只在chrome和firefox中获取bearer token。如何解决这个问题?

Ajax代码,

$.ajax({
            type:"POST",
            url:url,
            dataType: "json",
            async:false,
            headers:{ 
                'Authorization':'Basic '+btoa(useremail+":"+password)
            },
            data:'{"datas"}',
            success: function (data, status, request, xhr){
                alert(request.getResponseHeader('Authorization'));
            }

enter image description here

3 个答案:

答案 0 :(得分:1)

请注意,自jQuery 1.8 async选项不推荐使用。

至于为什么会发生这种情况:

  

在CORS请求期间,getResponseHeader()方法只能访问   简单的响应标头。简单响应头定义为   如下:

     
      
  • 缓存控制
  •   
  • 内容的语言
  •   
  • 内容类型
  •   
  • 到期
  •   
  • 上次修改
  •   
  • 附注
  •   

至于解决方案:

  

如果您希望客户端能够访问其他标头,您必须这样做   使用Access-Control-Expose-Headers标头。此标头的值   是您要公开的响应标头的逗号分隔列表   客户。

来源:https://www.html5rocks.com/en/tutorials/cors/

答案 1 :(得分:0)

参考本文:http://osric.com/chris/accidental-developer/2014/08/using-getresponseheader-with-jquerys-ajax-method/

尝试使用done函数,如文章中的示例所示:

$.ajax({
    type:"POST",
    url:url,
    dataType: "json",
    async:false,
    headers:{ 
        'Authorization':'Basic '+btoa(useremail+":"+password)
    },
    data:'{"datas"}',
}).done(function (data, textStatus, xhr) { 
    console.log(xhr.getResponseHeader('Authorization')); 
});

答案 2 :(得分:0)

试试这个..

    var settings = {
    "crossDomain": true,
    "url": url,
    "method": "POST",
    "headers": {
     "content-type": "application/x-www-form-urlencoded",
     "Authorization":"Basic "+btoa(useremail+":"+password)
    },
   "data": {
   "name": "name"
  }
 }

    $.ajax(settings).done(function (data,status, xhr) {
     console.log("Authorization=> "+xhr.getResponseHeader('Authorization'));
 });    
相关问题