16

ajax経由で送信しているフォームがあります。jqueryフォームプラグインを使用しています。私がやろうとしているのは、サーバーから返される「Location」ヘッダーを取得することです。ファイアバグで見ることができます。ただし、成功コールバックでgetResponseHeader()関数を呼び出すと、常に「未定義」が返されます。

コード:

form.ajaxForm({
  dataType: 'xml',
  data: {format: 'xml'},
  resetForm: true,
  success: function(xml,status,xhr){
    var location = xhr.getResponseHeader('Location');
    alert(location);
  });

場所は未定義です。しかし、firebugに「Location」ヘッダーが表示されます。私は何が欠けていますか?xhrオブジェクトからgetAllResponseHeaders()を呼び出しても、「undefined」を返します。

4

3 に答える 3

35

これが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-16T00:59:24.577 に答える
6

XMLHttpRequestはリダイレクトを透過的に追跡するため、最後のリクエストにはヘッダーがなく、すでにそのリダイレクトに続いており、そのリクエストからの応答ヘッダーが表示されます(ヘッダーを含む最初のリクエストではありませんLocation)。

于 2010-12-06T19:10:15.527 に答える
4

私は、新しいオブジェクトと空のボディに Location ヘッダーを持つ 201 "created" を返す rails/rest の方法を使用して、同様のことをしています。jQuery の ajax メソッドは、これに遭遇すると「parseerror」をスローします。これは、json を期待しているが何も返されないためです。次のように、エラー コールバックで 201 リダイレクトをキャッチするだけです。

function request_error(req, textStatus, errorThrown) 
{
    if (req.status == 201 ) {
        var created_loc = req.getResponseHeader('Location');
        console.log('(201) created: ' + created_loc);

        // ... manual redirect here i.e. issue another ajax request to created_loc
        return;
    }

    // ... handle an actual error here
}

お役に立てれば!

于 2011-02-28T19:07:18.050 に答える