ajaxError

次に、ajaxErrorです。 リクエストが失敗した時に実行に実行されるイベントですが、これもjQueryのソースの中で、ajaxErrorがどのように起動されているのか眺めてみます。

v1.3.2の3670行目付近のhandleErrorというメソッドの中でローカルイベントであるs.errorメソッドの後ろで起動されています。
 handleError: function( s, xhr, status, e ) {
  // If a local callback was specified, fire it
  if ( s.error ) s.error( xhr, status, e );

  // Fire the global callback
  if ( s.global )
   jQuery.event.trigger( "ajaxError", [xhr, s, e] );
 }
s.globalの条件分岐は、ajaxCompleteと同じですが、コールバックの第2引数以降へ渡す値が、3個になっています。

さらに、handleErrorが実行されている場所を追跡すると、まず、受信がsuccessではなかった時(v1.3.2の3604行目付近)に次のように起動されています。。
 jQuery.handleError(s, xhr, status);
この時、第2引数に渡されている[xhr, s, e]の配列内の各値が、ajaxCompleteのコールバック関数の第2引数以降へ渡されますが、 s は、ajaxCompleteと同じ、$.ajax( s )として渡されるオプション引数で、xhrも同じXHRオブジェクトです。statusには、"success" や "notmodified"、"timeout"などの文字列が入ります。 この場合、[xhr, s, e]のeは、statusということになります。

handleErrorは、もうひとつ別の場所(v1.3.2の3635行目付近)でxhr.sendに失敗した時に起動しています。
  // Send the data
  try {
   xhr.send(s.data);
  } catch(e) {
   jQuery.handleError(s, xhr, null, e);
  }
この場合は、第3引数には、nullを渡し、第4引数は、純粋に JavaScript の try catch 文からのイベントオブジェクト e が渡されます。

そして、jQuery.event.triggerメソッドの第1引数は、eventオブジェクトが渡されますので、次のような書式で表すことができます。
  $(セレクタ).ajaxError(
    function (event, XMLHttpRequest, ajaxOptions, thrownError) {
      //通信失敗時に実行される命令
    })

従って、第4引数のthrownErrorが渡されるのは、後者のsendメソッドが失敗した時ということになります。

逆に言えば、ここを注意深くチェックすれば、どこでエラーが起きているかの把握も可能と言うことになると思います。




※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。