使用jQuery读取存储在我的响应头中的JSON

时间:2012-12-12 02:41:33

标签: jquery ruby-on-rails

我希望能够使用jquery读取我的应用程序的响应标头,具体来说,我将标题'X-Messages'设置为rails的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对象,只显示常规alertconsole.log

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

好的,现在很明显getResponseHeader(),不是document上的函数,但我该如何实现呢?

2 个答案:

答案 0 :(得分:2)

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

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

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

如果你必须得到这个标题,你必须使用ajax调用来获取它。

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

答案 1 :(得分: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);
        }
    });