2012-09-12 16 views
5

同じページに301のリダイレクトを行いますが、末尾にスラッシュを付けたサーバーエンドポイントへのAJAX呼び出しがあります。AJAXで301のリダイレクト - リダイレクトされましたか?

AJAXで呼び出されたときにブラウザがリダイレクトするか、無視しますか?私の場合、それはそれらに従わないが、私はそれがサーバー設定から何かであるかもしれないと思った。

答えて

4

jqueryを使用している場合は、以下の質問を参照して実装することができます。少し遅れて

How to manage a redirect request after a jQuery Ajax call

How to prevent ajax requests to follow redirects using jQuery

handle jquery ajax redirect

+1

OK jQueryはリダイレクトに従わないので、わかります。ありがとう。 –

+7

Um、no。 XHRはリダイレクトに透過的に従います。 –

+1

すべてではありません。私は301のリダイレクト設定を持っているし、FFはそれに従わない。しかし、クロムはそうです。 – threejeez

3

たぶん、この答えはあるが、私は持っていた:デフォルトのjQuery(およびAjaxでのほとんどのライブラリ)に従わないことで、デフォルトではリダイレクトajaxリクエストの301レスポンスと同じ問題。解決策は非常に簡単だった:

Apacheの書き換えルールは次のようなものです:

RewriteRule ^([^/]\w+)/?$ index.php?%{QUERY_STRING} [L,E=MODULE:$1] 

あなたのXHRリクエストのURLは次のようにいろいろ書いなります:

/this/is/a/canonical/url + '?param=1&param=2...' 

それは301恒久的に移動につながりますあなたが直接ファイル呼び出し(fi * .php)を使わず、正規URL(fi * .phpのないディレクトリパスのように見える)に書き直すのであれば。

/this/is/a/canonical/url + '/' + '?param=1&param=2...' 

多分これは、誰かを助ける:ちょうどこのようなあなたのXHRリクエスト-URLに/を追加し、この問題を解決するために

+0

これは私のためにそれを修正しました、 –

-1

jQueryのAPIドキュメント(http://api.jquery.com/jQuery.ajax/)によると、async:false(別名シンクモード)はクロスドメインとdataType: "jsonp"リクエストをサポートしていません。

+2

申し訳ありませんが、これは質問と関係がありますか? –

+0

@EduardLuca申し訳ありませんが、あなたのリダイレクトはドメインを越えていません。 – GlacJAY

+0

別のドメインにまたがる必要はありません。リダイレクトは同じURLにありますが、末尾にスラッシュが付きます。 –

2

私もこの問題を抱えていました。後続のスラッシュについての示唆は私には分かりました。私はWeb.Configですべてを小文字にする書き換えルールを持っていました。それが私のAJAX呼び出しを台無しにしていました。私はGetResults(301として現れました)と私の書き換え(何らかの未知の理由のために)ポストしていました。結果は404になった小文字のgetresults GETに変更されました。

これは他人に役立つかもしれません。