5

認証を別のドメインに委任しています(ウィンドウ識別フレームワーク、フェデレーション認証セットアップ)。これで、セッションがajaxリクエストの前にタイムアウトした場合、サーバーはリクエストを認証サーバーにリダイレクトします。クロスドメイン呼び出しになるため、ajaxリクエストはブラウザによってキャンセルされます。jquery / javascriptでこれを検出する方法はありますか?

このような場合に0に設定されたxhrオブジェクトのステータスプロパティを調べましたが、キャンセルされたリクエストの良い指標ですか?(私はjquery $ .ajaxを使用してajaxリクエストを作成しています)

4

2 に答える 2

4

私もこれを調べてきましたが、検出したいものが完全に検出可能であるという証拠はほとんど見つかりませんでした. しかし、それがおそらく起こったことを検出する方法を見つけました。

イベントで発生することは次のとおりです。

  1. JavaScript コードが要求を開始します。
  2. ブラウザはサーバーにリクエストを送信します。
  3. サーバーはリダイレクトで応答します。
  4. ブラウザーは、新しい場所が別のドメインであると判断します。
  5. ブラウザーはリクエストをキャンセルします (ユーザーの安全を確保するため)。
  6. ブラウザは、リクエストが送信されなかったことを (完全に真実ではありませんが) 報告します。

エラー コールバックで、XMLHttpRequestオブジェクトのreadyStateフィールドを確認します。0 (「UNSENT」) の場合は、AJAX 要求が送信されなかったことを意味します。

もちろん、送信されなかった理由が常に完全に明確であるとは限りません。たとえば、ユーザーが単にネットワーク ケーブルを抜いた可能性があります。ただし、ネットワークが完全に機能していると仮定する場合は、 が表示されたときにreadyState == 0、クロスドメインの問題が原因で要求が送信されなかったと仮定することも合理的です。つまり、リダイレクトが発生しました。

jQuery を使用している場合は、jqXHR.readyState代わりに確認できます。

于 2013-11-14T20:41:21.437 に答える
0

このページを確認できます: http://api.jquery.com/jQuery.ajax/

リクエストが失敗した場合にキャッチできるエラー パラメータがあります。

エラー (jqXHR、textStatus、errorThrown)

これが役立つことを願っています。

于 2012-07-20T03:43:42.500 に答える