Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQueryAjax成功中获得响应头授权?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何在jQueryAjax成功中获得响应头授权?

Javascript 如何在jQueryAjax成功中获得响应头授权?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我在前端设置加密的用户名和密码授权,并从服务器获取请求头响应承载授权。在ajax中,我在safari中得到了正确的响应头,但在chrome和firefox中,它就像一个空值。问题在于,只有在chrome和firefox中才能获得承载令牌。如何解决这些问题 Ajax代码 $.ajax({ type:"POST", url:url, dataType: "json", async:false,

我在前端设置加密的用户名和密码授权,并从服务器获取请求头响应承载授权。在ajax中,我在safari中得到了正确的响应头,但在chrome和firefox中,它就像一个空值。问题在于,只有在chrome和firefox中才能获得承载令牌。如何解决这些问题

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'));
            }

参考本文:

尝试使用
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')); 
});

请注意,从jQuery 1.8开始,异步选项已被弃用

至于这可能发生的原因:

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

  • 缓存控制
  • 内容语言
  • 内容类型
  • 到期
  • 最后修改
  • 布拉格马
至于解决办法:

如果您希望客户端能够访问其他标头,则必须 使用访问控制暴露标头。此标头的值 是以逗号分隔的响应头列表,您要向其公开 客户

来源:

试试这个

    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'));
 });    

是跨域请求吗?您将
async:false
?@fabio.sussetto设置为Yes的任何具体原因。这是跨域请求。async false没有具体的原因。然后您应该删除async:false:“强烈建议将此选项设置为false(从而使调用不再异步),因为这可能会导致浏览器无响应。”您建议OP使用的
xhr
对象与他当前在成功回调中使用的
request
对象相同。添加
Access-Control-Expose-header
头后,
getResponseHeader
在firefox/chrome上是否仍然返回null?是。我仍然只得到空值。检查您是否在Safari中禁用了CORS:该选项位于“开发”菜单下。@Sathya您是否在开发人员的工具中看到Chrome/Firefox上此请求的服务器响应?请求是否已提出?是否返回响应?您是否添加了允许CORS的
Access Control Allow Origin
标题?@biphobe是的,我收到了开发人员工具的响应。你可以看到我的问题的附加图像。