jQuery Ajax访问自定义响应头

Sam*_*gun 5 javascript ajax jquery response-headers jqxhr

我正在使用一些API,我注意到在响应中我有这个:

Chrome控制台屏幕

我需要阅读"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"
});
Run Code Online (Sandbox Code Playgroud)

谁可能知道为什么?:(

谢谢

Ror*_*san 8

问题是因为请求正在使用CORS.因此,您需要明确允许将自定义标头公开给收件人.为此,请Access-Control-Expose-Headers在响应中添加标题,例如:

Access-Control-Expose-Headers: x-dl-units-left, x-dl-units, [other headers as needed...]
Run Code Online (Sandbox Code Playgroud)

请注意,这必须在创建响应的服务器上完成.如果您无法控制服务器,则无法进行此更改.您需要从API提供商处请求它.


dev*_*hai 5

没有提到您的访问说明符,因此它确实存储,但在一些未知的地方。现在您需要先对其进行初始化。为了更好的初始化:

回应

 Acccess-Control-Expose-Headers: x-dl-units-left;
Run Code Online (Sandbox Code Playgroud)

在客户端

 $.ajax(ajaxConfig).done(function(response, textStatus, xhr){

  var all = xhr.getAllResponseHeaders(); 
 // "content-type: application/json;charset=UTF-8"

});
Run Code Online (Sandbox Code Playgroud)