我希望能够使用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对象,只显示常规alert
或console.log
:
$(document).ready(function() {
var messages = document.getResponseHeader('X-Messages');
console.log(messages);
});
好的,现在很明显getResponseHeader()
,不是document
上的函数,但我该如何实现呢?
答案 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);
}
});