Open Source Web Development Tutorials - Dev Shed
これで安心!Ajaxのエラーへの対処方法
(2009/03/12公開)
HTTPステータス
HTTPサーバーを操作するときは、以下に示すようなHTTPエラーまたはステータス情報を予想しておく必要があります。これらのエラーやステータスメッセージは、伝送ラインとサーバーが正常に動作しているときに発生する可能性があります。
200: OK
これは、リクエストが成功したことを示します。クライアントのリクエストが正常に受信され、解析され、受け付けられました。
404: Not Found
これは、サーバーがリクエストのURLに一致する情報を見つけられなかったことを示します。
ここでは2つのメッセージのみを示しましたが、メッセージはほかにも多数あります。次に、簡単なリストを示します。
200: "Ok"
301: "Moved Permanently"
304: "Not Modified" (page hasn't been modified)
404: "Not Found"
403: "Forbidden"
401: "Unauthorized" (wrong password)
これらのメッセージは、サーバーによって送信されます。Ajaxオブジェクトには、これらのエラーやステータス条件を示すため、statusおよびstatusTextという2つのプロパティが含まれています。statusプロパティは数値を保持します。例えば、リクエストが成功した場合、statusプロパティは数値200を保持します。アイテムが見つからなかった場合(つまり、リクエストが失敗した場合)、数値404を保持します。
statusTextプロパティは、数値に対応するテキストのみを保持します。例えば、リクエストが成功した場合、statusTextプロパティは「OK」というテキストを保持します。アイテムが見つからなかった場合(つまり、リクエストが失敗した場合)、「Not Found」というテキストを保持します。
これら2つのプロパティのいずれかを使って、エラーやステータス条件をチェックできます。この方法は、伝送ラインとサーバーが正常に動作しているときのみ使えることに注意してください。注:伝送ラインとサーバーはほとんどの場合正常に動作しているため、これらのHTTPステータスメッセージは常にエラーを示しています。スクリプトが動作していない場合、そのこともメッセージにより示されます。
最も重要なHTTPステータス・コードは200:「OK」です。このコードは、リクエストがサーバーに受け付けられたことを示します。この数値はAjaxオブジェクトのstatusプロパティによって示され、「OK」というテキストはAjaxオブジェクトのstatusTextプロパティによって示されます。次のコードセグメントは、ステータスの数値200を使ってエラーをチェックする方法を示しています。
xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
pageDoc = xmlHttp.responseText;
}
}
else
{
//report error – to the client.
}
}
このコードセグメントは、Ajaxオブジェクトのonreadystatechangeメソッドを変更したものです。コードについて説明する前に、readyStateが4であることと、statusが200であることの違いについて説明しましょう。readyStateプロパティが4になったときは、トランザクションが完了した、つまり何かがダウンロードされたことを示します。しかし、ダウンロードされたのが、目的のAjaxテキストとは限りません。スクリプトが正しく動作していなければ(バグがある場合)、上に述べたように、サーバーからのエラーメッセージ(HTMLドキュメント形式)が返されることもあります。
statusプロパティが200の場合は、サーバーがリクエストを正しく受信し、解析し、受け付けたことを示します。これは、サーバーがクライアントに対して、クライアントがリクエストした情報を送信したことを意味しているわけではありません。その一方で、readyStateプロパティが4の場合、クライアントが何かを受信したことを意味しますが、リクエストした情報を受信したとは限りません。
上のコードセグメントに関する以下の説明が示すように、目的の情報がダウンロードされたことを確認するには、両方のプロパティが必要です。
上のonreadystatechangeメソッドの定義には、ifステートメントが含まれています。このステートメントは、readyStateが4であるかどうかをチェックします。そうである場合、クライアントコンピューターに何かがダウンロードされたことを意味しています。目的の情報がダウンロードされたことを確認するには、statusが200であることをテストする必要があります。statusが200であれば、目的の情報を受信したことが確認されるため、ダウンロードされたテキストの処理に移ることができます。200でない場合、エラーメッセージを発行します。
ここで疑問が浮かぶかもしれません。statusの数値が200の場合、サーバーがリクエストを正しく受信し、解析し、受け付けたことを示します。しかし、これはサーバーがクライアントへ何かを送り返したことを意味しません。クライアントが目的の情報を受信したことをどうやって確認すればいいのでしょうか?これは当然の疑問です。知っておくべきは、サーバーがリクエストを受信し、解析し、受け付けた場合、クライアントが正しい応答(テキスト)を受信することはほとんどの場合間違いないということです。この記事では、この点の詳細については触れません。
このため、上に示したコードセグメントは、Ajaxプロシージャに使うものとしては最小限のものであることに注意してください。
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








