とりあえず、SjaxでのAPIアクセスを汎用的にすべく、APIのレスポンスを連想配列のオブジェクトで返す関数を書く。
XMLをJavaScriptオブジェクトに変換するために[JSAN] XML.ObjTree – XML~JavaScriptオブジェクト変換クラスを使ってみることにした。
accessToAPIwithSjax : function(method, objParams) {
// SjaxでAPIにリクエスト
objParams['Method'] = method;
var myAjax = new Ajax.Request(
'/api/',
{
method: 'post',
parameters: $H(objParams).toQueryString(),
asynchronous: false
}
);
var respXml = myAjax.transport.responseXML;
var xotree = new XML.ObjTree();
var data = xotree.parseDOM( respXml.childNodes[1] );
return data;
},
エラーチェックとかはしてないけど。
var result = accessToAPIwithSjax('GetHogehoge', { param1: 'foo', param2: 'bar' });
alert(result.DocRoot.status);
みたいな感じで使える。ボタン押した時のイベントとかで、同期モードアクセスは便利。