今後10年を支えるWindowsアプリの条件Windows Liveが魅せる次世代マッシュアップ(5/5 ページ)

» 2006年11月28日 12時41分 公開
[大澤文孝,ITmedia]
前のページへ 1|2|3|4|5       

 例えば、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のようになる。

図4■リスト3の実行結果

 ここでは、XMLデータの取得例を説明したが、実際には、XMLデータである必要性はなく、テキスト形式やHTML形式など、どんな種類のデータでも読み込むことができる。

 XML以外のデータを読み込む場合には、responseXMLプロパティではなく、responseTestプロパティを使って、文字列として取得すればよい。その具体的な方法については、後述のJSONを使った結果取得の例を見てほしい。

 次回は、XMLデータをマニフェスト定義する方法から解説していこう。

 なお、記事の最初でも触れたように、オンライン・ムックPlus「Windows Liveが魅せる次世代マッシュアップ」では、“Liveガジェットのアイデア募集”を行っている。読者から寄せられたアイデアは、本特集上で優秀作やアイデア傾向などを紹介していく予定だ(2006年3月まで募集)。

前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ