ココを理解すれば近道な「Ajaxフレームワーク」Web 2.0で変わるWebプログラミングの常識(3/5 ページ)

» 2006年08月30日 11時00分 公開
[大澤文孝,ITmedia]

 ここでは、prototype.jsで提供される「$()関数」を使って、次のspan要素へと結果を差し込んでいる。


<p>
和:<span id="addvalue"></span>
</p>
<p>
差:<span id="diffvalue"></span>
</p>

 一方で失敗した時には、次に示すAjaxFailed関数を呼び出すようにしてある。


function AjaxFailed(xmlhttp, json)
{
  // 呼び出しが失敗した時の処理
  alert('エラーです:' + xmlhttp.statusText);
}

 この処理は、statusTextプロパティを参照して、HTTPのエラーメッセージをユーザーに表示しているだけだ。

 Ajax.Responseオブジェクトを使って通信する際に注意したいのは、onSuccessプロパティやonFailureプロパティで指定した関数が呼び出されるタイミングであることだ。

 これらのプロパティで指定した関数は、XMLHttpRequestオブジェクトによって通信が完了した時に呼び出される。より分かりやすく言えば、XmlHttpRequestオブジェクトのreadyStateプロパティが「4」になった場合にしか、これらのメソッドは呼び出されない。

 つまり通信中にエラーが起きた時には、onFailureプロパティで指定した関数は呼び出されない。onFailureプロパティでフックできるのは、「HTTP通信自身は成功したが、HTTPステータスコードが正常ではなかった時」に限られるのだ。

 通信そのものが失敗した時の処理を記述したい場合には、次に説明するonExceptionプロパティを使う必要がある。

 この処理の詳細は、prototype.jsのソースを見ると理解することができる。prototype.jsでは、通信が成功した時に、XMLHttpRequestオブジェクトのstatusプロパティ(HTTPのステータスコード)を調査し、ステータスが200番台の場合にはonSuccessプロパティで指定された関数を、そうでない場合にはonFailureプロパティで指定された関数を呼び出すように処理されている。

 また、ソース内容をよく見ると、「onステータス番号」というプロパティも有効であることが分かる。例えば、「on200」や「on304」、「on403」などのプロパティを用意すれば、それぞれステータスコードが200番、304番、403番の時に呼び出される関数を定義できるのだ。

3. 例外処理

 Ajax.Requestオブジェクトでの処理中に例外が発生すると、onExceptionプロパティで指定した関数が呼び出される。

 リスト6では、次のように処理している。


function AjaxException(xmlhttp, e)
{
  // 例外が発生した時の処理
  alert('例外です:' + e.message);
}

 渡される第1引数はXMLHttpRequestオブジェクト、第2引数は例外を示すExceptionオブジェクトだ。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ