【问题标题】:jqXHR.getAllResponseHeaders() won't return all headersjqXHR.getAllResponseHeaders() 不会返回所有标题
【发布时间】:2011-08-02 15:39:16
【问题描述】:

jQuery.ajax() 调用后,jqXHR.getAllResponseHeaders() 不会返回所有标题。服务器响应以下标头:

Connection: keep-alive
Content-Length: 64
Content-Type: application/json
X-My-CustomHeader: whatever

getAllResponseHeaders() 仅返回:

Content-Type: application/json

我做错了什么?

示例

var request = {
  'url': 'http://api.someExternalDomain.com/resource/',
  'type': someMethod,
  'success': function(data, textStatus, jqXHR) {
    console.log(jqXHR.getAllResponseHeaders());
  }
};

$.ajax(request);

【问题讨论】:

  • 这适用于我在 FF4 和 Chrome 上。而且我不完全确定,因为您似乎正在获取 一些 数据并且触发了您的成功回调函数,但这可能是您提出的跨域请求问题。
  • 另外,你在什么浏览器上看到这个问题?您是否尝试过记录从非跨域请求中获得的标头。
  • 嗯,我不希望它能够正常工作 - 除非您使用的 JSONP 看起来不像您正在做的。鉴于这是一个跨域请求,我仍然看不到您是如何获得 any 响应的。你在什么环境下运行这个?也许解决方案可能是摆脱 CDR。
  • 似乎即使使用 JSONP,您也不会得到响应头,只有数据:forum.jquery.com/topic/get-response-headers-cross-domain
  • 这里已经回答了这个问题:stackoverflow.com/questions/14686769/…

标签: ajax jquery


【解决方案1】:

来自jquery官网:

目前,由于 Firefox 中的一个错误,其中 .getAllResponseHeaders() 尽管 .getResponseHeader('Content-Type') 返回空字符串 返回一个非空字符串,自动解码 JSON CORS 响应 不支持在 Firefox 中使用 jQuery。

http://api.jquery.com/jQuery.ajax/

【讨论】:

    【解决方案2】:

    svenyonson 在 cmets 中指出了这一点,但对我来说这是答案,所以我正在提升它。 如果您使用 CORS,服务器必须明确说明允许客户端读取哪些标头。如果你想在 javascript 中读取X-My-CustomHeader,那么这个标头应该在服务器响应中:

    Access-Control-Expose-Headers: X-My-CustomHeader
    

    更多详情here

    猜你喜欢
    • 2018-12-05
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2013-02-02
    • 2017-02-04
    • 2017-10-06
    相关资源
    最近更新 更多