2

我希望能够使用 jquery 读取我的应用程序的响应标头,具体来说,我将标头“X-Messages”设置为 rail 的 flash 消息哈希的字符串表示形式。

我的问题与此类似: https ://stackoverflow.com/a/2729454/103739

然而,我有一个主要区别,这不是 JSON 响应。我只想用 jQuery 读取我的 HTML 页面中返回的标题,并为 JSON 对象中的每个项目记录一些内容。

这是我在控制器中所做的事情:

class ApplicationController < ActionController::Base
  after_filter :flash_to_headers

  # ...

  def flash_to_headers
    response.headers['X-Messages'] = flash.to_hash.to_json.to_s
  end
end

然后这就是我难过的地方,我想在页面加载时获取这个 JSON 对象并只显示一个常规的alert,或者console.log

$(document).ready(function() {
  var messages = document.getResponseHeader('X-Messages');
  console.log(messages);
});

好的,现在显然getResponseHeader(), 不是一个函数 on document,但是我怎样才能做到这一点呢?

4

2 回答 2

2

您可以使用这样的 Ajax 调用来获取它:

var xhr = $.ajax({
        type: "POST",
        data: {},
        url: "yoururl.html",
        success: function(output, status) {
            var messages = $.parseJSON(xhr.getResponseHeader('X-Messages'));
            console.log(messages);
        },
        error: function(output) {
            console.log(output);
        }
    });
于 2012-12-12T03:14:08.760 回答
2

HTML DOM 旨在访问和操作 HTML 文档。

HTTP 标头存在于 HTTP 协议中,而不是 HTML 文档中。

我不认为您可以从 HTML DOM 中获取 HTTP 标头,因为您可以通过 FTP 或其他方法获取 HTML DOM,您是如何从 FTP 中获取 HTTP 标头的?

如果要获取此标头,则必须使用 ajax 调用来获取它。

但是,有一个例外:如果您正在编写 chrome(或其他浏览器)扩展程序,您可以从 chrome API 获取 headers。

于 2012-12-12T03:09:07.563 回答