175

したがって、このjQuery AJAX呼び出しがあり、応答はサーバーから302リダイレクトの形式で送信されます。このリダイレクトを取得してiframeにロードしたいのですが、JavaScriptアラートでヘッダー情報を表示しようとすると、firebugが正しく認識していても、nullが表示されます。

役立つ場合は、次のコードを使用します。

$j.ajax({
    type: 'POST',
    url:'url.do',
    data: formData,
    complete: function(resp){
        alert(resp.getAllResponseHeaders());
    }
});

URLを応答本文に移動するためにサーバー側のものに実際にアクセスすることはできません。これが最も簡単な解決策であることがわかっているので、ヘッダーの解析に関するヘルプは素晴らしいでしょう。

4

8 に答える 8

200

古いバージョンのjqueryを使用している場合、cballouのソリューションは機能します。新しいバージョンでは、次のことも試すことができます。

  $.ajax({
   type: 'POST',
   url:'url.do',
   data: formData,
   success: function(data, textStatus, request){
        alert(request.getResponseHeader('some_header'));
   },
   error: function (request, textStatus, errorThrown) {
        alert(request.getResponseHeader('some_header'));
   }
  });

ドキュメントによると、XMLHttpRequest オブジェクトは jQuery 1.4 以降で利用できます。

于 2010-11-21T02:02:06.197 に答える
140

これがCORS リクエストの場合、デバッグ ツール (Chrome->Inspect Element->Network など) にすべてのヘッダーが表示される場合がありますが、xHR オブジェクトは、そのようなヘッダーが単純な応答ヘッダーxhr.getResponseHeader('Header')である場合にのみ (経由で)ヘッダーを取得します。

  • Content-Type
  • Last-modified
  • Content-Language
  • Cache-Control
  • Expires
  • Pragma

このセットにない場合は、サーバーから返されるAccess-Control-Expose-Headersヘッダーに存在する必要があります。

問題のケースについては、CORS リクエストの場合、以下のヘッダーも存在する場合にのみLocation、オブジェクトを介してヘッダーを取得できます。XMLHttpRequest

Access-Control-Expose-Headers: Location

CORS リクエストでない場合は、XMLHttpRequest問題なく取得できます。

于 2013-03-16T01:07:38.207 に答える
38
 var geturl;
  geturl = $.ajax({
    type: "GET",
    url: 'http://....',
    success: function () {
      alert("done!"+ geturl.getAllResponseHeaders());
    }
  });
于 2010-08-07T20:28:56.160 に答える
18

AJAX と 302 リダイレクトに関する残念な真実は、ブラウザーがヘッダーを XHR に渡さないため、リターンからヘッダーを取得できないことです。ブラウザが 302 を確認すると、リダイレクトが自動的に適用されます。この場合、ブラウザーがヘッダーを取得したため、firebug にヘッダーが表示されますが、ブラウザーがヘッダーを渡さなかったため、ajax には表示されません。これが、成功ハンドラとエラー ハンドラが呼び出されない理由です。完全なハンドラーのみが呼び出されます。

http://www.checkupdown.com/status/E302.html

The 302 response from the Web server should always include an alternative URL to which redirection should occur. If it does, a Web browser will immediately retry the alternative URL. So you never actually see a 302 error in a Web browser

これは、件名に関するいくつかのスタックオーバーフローの投稿です。一部の投稿では、この問題を回避するためのハックについて説明しています。

jQuery Ajax 呼び出し後のリダイレクト要求を管理する方法

JavaScript で 302 FOUND をキャッチする

HTTP リダイレクト: 301 (永続的) と 302 (一時的)

于 2012-02-06T20:30:34.297 に答える
10

jQuery によって使用される基礎となる XMLHttpRequest オブジェクトは、302 ステータス コードを返すのではなく、常にサイレントにリダイレクトに従います。したがって、jQuery の AJAX 要求機能を使用して、返された URL を取得することはできません。代わりに、すべてのデータをフォームに入れ、属性を iframe の属性のtargetに設定してフォームを送信する必要があります。name

$('#myIframe').attr('name', 'myIframe');

var form = $('<form method="POST" action="url.do"></form>').attr('target', 'myIframe');
$('<input type="hidden" />').attr({name: 'search', value: 'test'}).appendTo(form);

form.appendTo(document.body);
form.submit();

サーバーのurl.doページは iframe に読み込まれますが、その 302 ステータスが到達すると、iframe は最終的な宛先にリダイレクトされます。

于 2010-11-21T02:24:45.827 に答える
9

これを試して:

type: "GET",
async: false,
complete: function (XMLHttpRequest, textStatus) {
    var headers = XMLHttpRequest.getAllResponseHeaders();
}
于 2009-10-13T00:12:27.453 に答える
2

+1 PleaseStand に、これが私の他のハックです。

検索したところ、「クロス ajax リクエスト」が XHR オブジェクトから応答ヘッダーを取得できないことがわかり、あきらめました。代わりに iframe を使用します。

1. <iframe style="display:none"></iframe>
2. $("iframe").attr("src", "http://the_url_you_want_to_access")
//this is my aim!!!
3. $("iframe").contents().find('#someID').html()  
于 2011-10-10T05:59:54.033 に答える