jQuery Ajax 访问自定义响应标头
Posted
技术标签:
【中文标题】jQuery Ajax 访问自定义响应标头【英文标题】:jQuery Ajax access custom response headers 【发布时间】:2018-02-17 04:54:38 【问题描述】:我正在使用一些 API,我注意到在响应中我有这个:
我需要阅读“x-dl-units-left”,但我得到了 null:
$.ajax(ajaxConfig).done(function(response, textStatus, xhr)
var left = xhr.getResponseHeader("x-dl-units-left"); //null
var all = xhr.getAllResponseHeaders(); // "content-type: application/json;charset=UTF-8"
);
谁知道为什么? :(
谢谢
【问题讨论】:
谢谢 4 编辑 Rory :) 我忘了按 Ctrl+K :D This answer 似乎很好地解释了这个问题。 【参考方案1】:问题是因为请求使用了 CORS。因此,您需要明确允许您的自定义标头向收件人公开。为此,请在响应中添加 Access-Control-Expose-Headers
标头,例如:
Access-Control-Expose-Headers: x-dl-units-left, x-dl-units, [other headers as needed...]
请注意,这必须在创建响应的服务器上完成。如果您无法控制服务器,那么您将无法进行此更改。您需要从 API 提供商处请求它。
【讨论】:
其实API不是我的,所以我不能编辑那些..但是我不能访问为什么我可以在浏览器中看到它们?? 如果我用 php curl 得到这个? 我添加了一个注释;您需要请求 API 提供程序添加标头 - 尽管很奇怪他们启用了 CORS 而不添加标头来公开自定义标头。大概只是疏忽。允许浏览器查看所有内容。由于同源策略,JS 在这种情况下不能 如果您通过 PHP 使用 cURL 获取它,那么它可以正常工作,因为 CORS 不会成为问题。 在浏览器中看到它们与 xhr 可以检索到的不同。 cURL 应该检索所有标头,因此这可能是最佳选择。【参考方案2】:没有提及您的访问说明符,因此它确实存储但在一些未知的地方。现在你需要先初始化它。 为了更好的初始化:
回应
Acccess-Control-Expose-Headers: x-dl-units-left;
在客户端
$.ajax(ajaxConfig).done(function(response, textStatus, xhr)
var all = xhr.getAllResponseHeaders();
// "content-type: application/json;charset=UTF-8"
);
【讨论】:
我会尽快试试这个 您只需要在函数之外声明并获取 left 的值。以上是关于jQuery Ajax 访问自定义响应标头的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC过滤器获取自定义jquery ajax标头
如何使用js或jQuery向ajax请求添加自定义HTTP标头?