4

jQuery 1.2.6 を使用している古いシステムで作業しています。関数を介して AJAX リクエストを送信していjQuery.ajaxます。ヒットしている URL は 302 HTTP リダイレクト レスポンスを送信しており、最終的には 200 HTTP OK レスポンスになります。successとコールバックの両方を登録しましたcompleteが、どちらも呼び出されません。

私の質問は次のとおりです。リダイレクトが発生した後に呼び出すことができる、または呼び出されるコールバックはありますか?

jQuery.ajax({
    type: "GET",
    url: url,
    data: null,
    dataType: "json",
    async: false,
    success: function(data, textStatus) {
        alert("SUCCESS CALLED: " + textStatus);
    },      
    complete: function(xhr, status) {
        alert("COMPLETE CALLED");
    }
});

注:応答は JSON ではなく HTML ですが、dataTypeを にhtml変更すると要求が変更されます。OPTIONSリクエストの代わりにリクエストを送信し、GETリダイレクトもしなくなりました。これらのリダイレクトが発生する必要があります。

4

2 に答える 2

2

コメントによると:

を に変更するdataTypehtml、リクエストが変更されます。OPTIONSリクエストの代わりにリクエストを送信し、GETリダイレクトもしなくなりました。

これは、クロスドメインリクエストを送信したときに発生します。つまり、urlは、このスクリプトが提供されているドメインと同じドメインを指していません。これはつまり、Same Origin Policyに違反しています。サーバー コードにアクセスできないということは、それが別のドメインで実行されていることも確認します。jQuery によって送信されたHTTPOPTIONS要求では、特定の URL で使用できる要求メソッドのリストを含むヘッダーを含む応答をサーバーが返して、AllowjQuery がそれに応じて続行できるようにする必要があります。これは明らかに起こっていません。

サーバーが本当に完全に制御できない場合は、目的の URL に接続してその応答をストリーミングするプロキシをサーバー上に作成する必要があります。url次に、代わりにプロキシ URL を指すようにjQuery を変更します。使用しているプログラミング言語は不明ですが、質問の履歴から、Java に精通していることがわかります。その場合、java.net.URLConnectionApache HttpComponents クライアントで単純なサーブレットを使用できます。

于 2011-06-06T19:17:08.547 に答える
0

jquery ajax オプションを使用する

データ型: 'jsonp'

クロスドメイン リクエストのリダイレクトを実行します。(FF/Chrome ブラウザーでテスト済み)

ただし、この解決策は、応答を処理しない場合、またはクロスドメイン URL が jsonp アプローチをサポートしている場合にのみ役立ちます。

于 2012-09-06T14:04:50.927 に答える