XMLHttpRequest

非同期HTTP通信を実現する。元々は名前の通りXMLデータ通信のためのAPIである。Firefox、Safari、Opera、IE7ではスクリプト実行環境のネイティブオブジェクトとして使用できる。IE6以前ではJScriptのActiveX呼び出しとして使用する。

XMLHttpRequestオブジェクトのメンバ

各ブラウザで共通に使用できるXMLHttpRequestオブジェクトのメンバです。

プロパティ

onreadystatechange
オブジェクトの状態が変化したときに実行されるイベントハンドラ。関数オブジェクトをセットして通信状態(readyStateプロパティ)が変化したときにコールバックされる関数を指定。
readyState
オブジェクトの状態を示す値。
0 = uninitialized、1 = loading、2 = loaded、3 = interactive、4 = complete
readyStateが4のとき、以下に示すプロパティからレスポンスを取得できるようになる。
responseText
HTTPレスポンスボディを文字列として取得するプロパティ。
responseXML
HTTPレスポンスボディをDOMドキュメントオブジェクトとして取得できるプロパティ。レスポンスはXML文書でなくてはならない。
status
HTTPレスポンスステータスコード、200、404等。
statusText
ステータスコードに対応するメッセージ、200ならOK、404ならNot Found。

メソッド

abort()
通信を中断します。同一のXMLHttpRequestオブジェクトに対して連続でsendする場合、現在の通信をキャンセルする。
getAllResponseHeaders()
HTTPレスポンスヘッダを全て文字列として取得。
getResponseHeader(headerLabel)
headerLabelで指定したレスポンスヘッダの内容を取得。
open(method, URL, asyncFlag, userName, password)
指定したURLに接続する。methodにはPOSTまたはGETを指定する。ブラウザによってはDELETEやPUTを発行することも可能。asyncFlagは、通信を非同期とするかどうかのフラグ。falseを指定するとsendメソッド実行時、通信完了まで処理がブロックされる。userNameとpasswordはBASIC認証のユーザ名、パスワードを指定。asyncFlag, userName, passwordは省略可能。
send(content)
HTTPリクエストを送信する。contentはレスポンスボディ。レスポンスボディが無い場合はnullを渡すが、Operaではnullを渡すとエラーになるため空文字列を渡す。
setRequestHeader(label, value)
labelで指定したHTTPリクエストヘッダにvalueをセットする。

Dynamic HTML and XML: The XMLHttpRequest Object

クロスドメイン制限

XMLHttpRequestによる通信は異なるドメインのサーバと通信することはできない。

例えばこのページ、http://web.paulownia.jp/wiki/ajax/xmlhttprequest から通信できるのは、web.paulownia.jpドメインのURLのみ。ttp:web.paulownia.jp/hoge/fuga.cgi 等にはリクエストを発行できるが、ttp:paulownia.jp/hoge.cgi はダメ。

変な癖?バグ?

  • sendメソッドにnullを渡せない。(Opera 8)→空文字を渡す。
  • ステータス204の場合、statusが1223になる(IE6)
  • setRequestHeaderが存在するのに、動作しない(Opera 8)
  • ステータス200で、レスポンスボディが空の場合、statusがundefined(Safari 2)
  • リダイレクトレスポンス時に、Locationヘッダが付いていない場合、statusが0(IE6)
  • responseTextで日本語が文字化け(Safari 2)→回避法
 
ajax/xmlhttprequest.txt · 最終更新: 2007/12/02 18:18 (外部編集)
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki