intra-mart Accel Platform / SAStruts+S2JDBC プログラミングガイド

«  汎用メッセージ画面   ::   コンテンツ   ::   ダイアログ指針  »

Ajax のエラー処理

Ajax の通信先で回復不能なエラーが発生した場合、エラー画面へ遷移したい場合があります。
ここではこのような場合にエラー画面へ遷移するための仕組みと実装方法を説明します。

エラー画面へ遷移するための仕組み

サーバ側で例外が発生すると httpXXX.jsp(http500.jsp, http401.jsp など)が呼び出されます。

Ajax のリクエストの場合、httpXXX.jsp のレスポンスは Ajax 内で閉じるため画面にエラーが表示されません。
Ajax のリクエストでもエラー画面に遷移するため、以下のような仕組みを実装しています。
  1. Ajax のリクエストを送る際に、HTTP Header へ x-jp-co-intra-mart-ajax-request-from-imui-form-util = true をセットする。
  2. サーバで例外が発生した際、httpXXX.jsp は HTTP Header へ x-jp-co-intra-mart-ajax-request-to-imui-form-util = true をセットし、エラー情報を JSON としてレスポンスを返す。
  3. $.ajax の error: で、x-jp-co-intra-mart-ajax-request-to-imui-form-util が HTTP Header に存在する場合、エラー情報をパースし、エラー情報を Form にセットして元の画面(httpXXX.jsp)へサブミットする。
  4. 画面にサーバで発生した例外が表示される。

実装方法

jQuery.ajax の headers, error に以下のように指定します。
$.ajax({
  ...,
  headers: { 'x-jp-co-intra-mart-ajax-request-from-imui-form-util': 'true' },
  error: imuiTransitionToErrorPage,
  ...
});
このように実装することで、サーバで例外が発生した際にエラー画面へ遷移させることができます。

独自のエラー処理をしながらエラー画面へ遷移したい

上記サンプルでは、エラー画面へ遷移するだけで他の処理はしません。
独自の処理を追加したい場合は以下のように実装することができます。
$.ajax({
  ...,
  headers: { 'x-jp-co-intra-mart-ajax-request-from-imui-form-util': 'true' },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    //
    // 独自の処理を実行
    //

    imuiTransitionToErrorPage(jqXHR, textStatus, errorThrown);
  },
  ...
});

«  汎用メッセージ画面   ::   コンテンツ   ::   ダイアログ指針  »