3

リダイレクト URL である残りの呼び出しで渡される uri があり、呼び出しをインターセプトして、ヘッダーにリダイレクトの「場所」を取得できるようにしたいと考えています。

次のコードは、Location ヘッダーに対して null を返します。このクライアント側を実行する適切な方法は何ですか?

$(document).ready(function () {
    $.ajax({
        url: 'http://myserver.com/redirect?token=AAAnY13Y-76LZ4zXDOd',  // obviously not cross domain and contains redirect location to a youtube link to embed in my page, http://www.youtube.com/embed/bl2j345-xy
        data: {
            something: 'someotherthing'
        },
        complete: function (request, status) {
            var location = request.getResponseHeader("Location");  // this is null...it shows up in Fiddler as http://www.myotherserver.com in the Location Header
        },
        error: function (request, error) {
            alert(request.responseText);
        }
    });
}); 
4

2 に答える 2

0

リダイレクト場所http://www.myotherserver.comなどを返すように-> http://myserver.com/redirect?token=AAAnY13Y-76LZ4zXDOdを設定してみませんか :

complete: function (request, status) {
window.location.href=request;
}
于 2012-08-10T22:35:00.417 に答える
0

このフィドルを使用します。現在常にエラーが発生するため、デバッグ用のコンソール出力をいくつか追加して、コードを少し更新しましNETWORK_ERR: XMLHttpRequest Exception 101た。

私が行った主な変更は、空のヘッダーの原因である可能性があると思われる設定async: falseでした。完了する前にリクエストが返されないようにするため、これは重要です。デフォルト設定はasync: true指定されていない場合です。これにより、ajax 呼び出しがすぐに返されます。これが、呼び出しが成功した場合でも応答ヘッダーが表示されない理由です。

また、単純なデバッグを含むコールバックを追加してsuccess: function...、そこに入った場合に確実にキャッチされるようにしました。

crossDomain 非非同期リクエストと crossDomain 設定に関するajaxドキュメントの部分も確認してください。

async
デフォルト: true
デフォルトでは、すべてのリクエストが非同期で送信されます (つまり、これはデフォルトで true に設定されています)。同期リクエストが必要な場合は、このオプションを false に設定します。クロスドメイン リクエストと dataType: "jsonp" リクエストは、同期操作をサポートしていません。

crossDomain (追加 1.5)
デフォルト: 同一ドメイン リクエストの場合は false、クロスドメイン リクエストの
場合は true 同じドメインで crossDomain リクエスト (JSONP など) を強制する場合は、crossDomain の値を true に設定します。これにより、たとえば、別のドメインへのサーバー側のリダイレクトが可能になります。

リダイレクトがクロスドメインと見なされるかどうかはわかりませんが、上記の組み合わせがエラーと空の要求ヘッダーの原因であると推測しています。

于 2012-08-10T23:10:29.537 に答える