2

jqueryを使用してアプリの応答ヘッダーを読み取れるようにしたいのですが、具体的には、ヘッダー「X-Messages」をrailのフラッシュメッセージハッシュの文字列表現に設定します。

私の質問はこれに似ています: https ://stackoverflow.com/a/2729454/103739

ただし、大きな違いが1つあります。これは、JSON応答ではないということです。HTMLページで返されたヘッダーをjQueryで読み取り、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が、どうすればこれを達成できますか?

4

2 に答える 2

2

HTML DOM is designed to access and manipulate HTML documents.

HTTP header exists in HTTP protocol, not HTML document.

I don't think you can get HTTP header from a HTML DOM, because you can get a HTML DOM by FTP or other methods, how did you get HTTP header from FTP?

If you got to get this header, you have to use an ajax call to get it.

However, there is an exception:If you are writing a chrome (or other browser) extension, you can get headers from chrome API.

于 2012-12-12T03:09:07.563 に答える
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 に答える