Ajax経由で送信するフォームがあります。 jqueryフォームプラグインを使用しています。私がやろうとしているのは、サーバーから返される「Location」ヘッダーを取得することです。私はそれをfirebugで見ることができます。しかし、成功コールバックでgetResponseHeader()関数を呼び出すと、常に「undefined」が返されます。
コード:
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」が返されます。
これが 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
は問題なく取得できます。
XMLHttpRequestは 透過的にリダイレクトに従う であるため、finalリクエストにはヘッダーがなく、すでにそのリダイレクトに従い、 thatリクエストからのレスポンスヘッダーが表示されています(Location
ヘッダーを含む最初のリクエストではありません)。
Rails/restの方法を使用して、Locationヘッダーを含む201 "created"を新しいオブジェクトと空の本体に返す、同様のことを行っています。 jQueryのajaxメソッドは、jsonを予期しているが何も返さないため、これに遭遇すると「parseerror」をスローします。私は単に次のようにエラーコールバックで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
}
お役に立てれば!