Javascript 如何在jQueryAjax成功中获得响应头授权?
我在前端设置加密的用户名和密码授权,并从服务器获取请求头响应承载授权。在ajax中,我在safari中得到了正确的响应头,但在chrome和firefox中,它就像一个空值。问题在于,只有在chrome和firefox中才能获得承载令牌。如何解决这些问题 Ajax代码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({
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是的,我收到了开发人员工具的响应。你可以看到我的问题的附加图像。