GETメソッドではなく、POSTメソッドを使う場合も同様に処理することができる。
POSTメソッドを使う場合には、Web.Network.createRequestメソッドの第1引数をWeb.Network.Type.XmlPostとすればよい。次の通りだ。
var url =
"http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch";
// パラメータ
var param = "appid=" + 自分のアプリケーションID;
param += "&query=" + encodeURI("ウィンドウズ");
response =
Web.Network.createRequest(
Web.Network.Type.XMLPost, url,
null, OnXmlDataReceived,
Web.Utility.Prioritizer.Priorities.Medium,
param,
{"Content-Type":"application/x-www-form-urlencoded"});
response.execute();
ここに示したように、POSTメソッドで送信する際には、Content-Typeヘッダの設定を忘れないようにしてほしい。この設定を忘れると、REST形式のWebサービスは失敗する。これはAJAXにおける通信の注意点と同じだ。
Windows Liveのネットワークリクエストオブジェクトでは、JSON形式で戻り値を返すWebサービスを呼び出すこともできる。
Yahoo!検索サービスでは、「output=json」というパラメータを付けると、結果をJSON形式で取得できる。
output=jsonオプションについての記載は、日本語版のYahoo!デベロッパーネットワークにはないが、日本語版Yahoo!でもこのパラメータは動作する。
var url =
"http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?";
url += "appid=" +自分のアプリケーションID;
url += "&query=" + encodeURI("ウィンドウズ");
url += "&output=json";
var response =
Web.Network.createRequest(
Web.Network.Type.XMLGet, url,
null, OnXmlDataReceived);
response.execute();
このときの受け手となるOnXmlDataReceived関数では、responseTextプロパティを使って文字列として読み込み、それをeval関数で評価すればよい。具体的には、次のようになる。
function OnXmlDataReceived(response, arg)
{
// 成功したかどうかを調べる
if (response.status == 200)
{
// 成功している
// JSONを評価
var result = eval('(' + response.responseText + ')');
// 以下、展開処理
var root = result.ResultSet.Result;
for (var i = 0; i < root.length; i++)
{
var pElement = document.createElement("p");
var aElement = document.createElement("a");
aElement.href = root[i].Url;
aElement.innerText = root[i].Title;
pElement.appendChild(aElement);
m_el.appendChild(pElement);
}
}
else
{
m_el.innerText = "XMLデータの受信に失敗しました。ステータスは" . response.status;
}
}
Copyright © ITmedia, Inc. All Rights Reserved.