そろそろAjaxって奴を・・・調べてみよう。
基本の流れはこんな感じとのこと。
var xmlReader = new XMLHttpRequest(String);
例によってIEでは対応していないのでActiveXObject(string)で代用する。 verによってstringも変わる。
どうせライブラリを利用するしあまり気にしなくていいか・・・
xmlReader.open("get", "http://www.kantenna.com/app/index.xml", true);
第三引数にfalseを渡すと同期になる。同期の場合、 通信が終わるまで次の処理が行えない。よって大きいデータだったり レスポンスが返ってこなかった場合などハングアップしたようになるとのこと。
なので基本はtrue指定で非同期通信にする。
ってかopen()って名前なんでこの時点で送信してるかと思いきや実は設定だけで 通信はしていない。この設定を送るにはsend()を呼び出す。
xmlReader.send(null);
getの場合はnullの決め打ちでOK
非同期通信の場合、XMLHttpRequest.readyStateに状況に応じた ステータスが格納される。ステータスが変化したときonreadystatechangeが発生するので readyState、status、statustextに応じた処理を行う場合、ここに記述する。
xmlReader.onreadystatechange = function(){
if (xmlReader.readyState == 4 && xmlReader.status == 200) {
// ここにデータ読み込み完了 AND リクエスト成功 時の処理を記述
}
}
| 0 | open()が呼ばれていない。 |
|---|---|
| 1 | open()は呼ばれたがsend()されてない |
| 2 | HTTPレスポンスを受け取った |
| 3 | データの一部の読み込みができている |
| 4 | 全てのデータの読み込みが完了している |
通信した際にサーバから返されるHTTPレスポンスコードと文字が入る
| status | statusText | 意味 |
|---|---|---|
| 200 | OK | リクエスト成功 |
| 401 | unauthorized | 認証エラー |
| 404 | Not Found | 対象データがない |
| 500 | Internal Server Error | サーバエラー |
無事リクエストが完了した場合、データはresponseText、responseXMLに格納される。 サーバレスポンスがtext/xmlの場合、responseXMLから扱える。
xmlReader.onreadystatechange = function(){
if (xmlReader.readyState == 4 && xmlReader.status == 200) {
var xml = xmlReader.responseXML;
var items = xml.getElementsByTagName("item");
document.getElementById("AjaxTest").onclick = function() {
alert(items[0].childNodes[1].textContent);
}
}
}
resposeXMLはNodeを継承したDocumentオブジェクトなので ツリーを辿ったり追加できたりする。
が、今のところ色々と問題あるようなのでXMLでの取得はおすすめされてない感じ。 JSONというフォーマットがおすすめされている。
/ 金額 : ¥ 2,940
1-5
6-10