例えば、2つのネットワークリクエストオブジェクトを作り、その両者が同じURLである場合には、後からexecuteメソッドを呼び出した方には、実際の通信が行われないことを意味する。第4引数に渡した関数は呼び出されないので注意してほしい。
これは、すぐあとに説明するマニフェストにXMLリソースを記述する場合も同じだ。
マニフェストにXMLリソースを定義した場合、そのXMLリソースと同じURLをもつリソースを、ネットワークリクエストオブジェクトを使って読み込もうとした場合、再取得はされない。第4引数に渡した関数は呼び出されないという特徴があるのだ。
受信通知を受け取るOnXmlDataRecived関数は、リスト3において、次のように定義してある。
function OnXmlDataReceived(response, arg)
{
〜中略〜
}
第1引数は、ネットワークリクエストオブジェクトだ。第2引数はオプション引数であり、createRequestメソッドを呼び出した時の第3引数の値が、そのまま引き渡される。
リスト3では、createRequestメソッドの第3引数にnullを渡している。このため、OnXmlDataRecuvedメソッドのarg部分にはnullが渡される。もし必要であれば、この引数を通じて、何らかの値を受け渡すことができる。逆に必要ない場合には、第2引数の受け取りを省略しても問題がない。
第1引数として受け取るネットワークリクエストオブジェクトは、AJAXで使うXmlHttpRequestと同じプロパティを備えている。
つまり、statusプロパティを参照して、HTTPのステータスコードを得たり、responseTextプロパティを使って文字列として結果を受け取ったり、さらにresponseXMLプロパティを使って結果をDOMオブジェクトとして取得したりすることができるのだ。
リスト3では、まず、statusプロパティが200であるかどうかを調べ、リクエストが正しく完了したかどうかを調べている(「200」という値は、HTTPの成功を示すステータスコードのこと)。
if (response.status == 200)
{
// 成功した
}
そして成功したならば、responseXMLプロパティを使って結果をDOMオブジェクトとして受け取り、そのルート要素を取得している。
var rootnodes =
response.responseXML.documentElement;
あとは単純な、XMLのパース処理にほかならない。リスト3では、次に示すループ処理で、受信したXMLデータの子要素を取得し、それをpタグ要素に変換してLiveガジェット内に差し込んでいくという処理をしている。
for (var i = 0; i < rootnodes.childNodes.length; i++)
{
var pElement = document.createElement("p");
pElement.innerText =
rootnodes.childNodes[i].firstChild.nodeValue;
m_el.appendChild(pElement);
}
このプログラムの実行結果は、図4のようになる。
ここでは、XMLデータの取得例を説明したが、実際には、XMLデータである必要性はなく、テキスト形式やHTML形式など、どんな種類のデータでも読み込むことができる。
XML以外のデータを読み込む場合には、responseXMLプロパティではなく、responseTestプロパティを使って、文字列として取得すればよい。その具体的な方法については、後述のJSONを使った結果取得の例を見てほしい。
次回は、XMLデータをマニフェスト定義する方法から解説していこう。
なお、記事の最初でも触れたように、オンライン・ムックPlus「Windows Liveが魅せる次世代マッシュアップ」では、“Liveガジェットのアイデア募集”を行っている。読者から寄せられたアイデアは、本特集上で優秀作やアイデア傾向などを紹介していく予定だ(2006年3月まで募集)。
Copyright © ITmedia, Inc. All Rights Reserved.