Yahoo! UI Libraryを使用して、select要素のオプションデータを非同期に取得するメモです。
サーバー側は、次のようなJSON形式のデータを返します。
JavaScript:
-
[{"id":"1","name":"test"},{"id":"2","name":"test2"}]
クライアント側のJavaScriptのサンプルです。
onLabelClickは、Yahoo! UI LibraryのTreeviewのラベルをクリックしたときに呼ばれる関数です。
JavaScript:
-
function onLabelClick(node)
-
{
-
var form_elem = document.getElementById("form_edit");
-
if (!form_elem) {
-
return;
-
}
-
-
var sel_elem = document.getElementById("sel_foo");
-
var sel_children = sel_elem.childNodes;
-
var count = sel_children.length;
-
YAHOO.log("count: " + count);
-
for (var i=count-1;i>0;i--) {
-
var opt_elem = sel_children[i];
-
sel_elem.removeChild(opt_elem);
-
}
-
// node.data.idは、選択リストを取得するキー(グループIDのようなもの)
-
getFoo(node.data.id);
-
}
-
-
function getFoo(cid)
-
{
-
var sig_elem = document.getElementById("transaction_sig");
-
var transaction_sig = 0;
-
if (sig_elem) {
-
transaction_sig = sig_elem.value;
-
}
-
-
YAHOO.util.Connect.initHeader('X-Signature', transaction_sig);
-
-
var con_url = "/URL" + cid;
-
-
var con_obj = YAHOO.util.Connect.asyncRequest('GET',con_url,callback);
-
}
-
-
var handleSuccess = function(o)
-
{
-
// o.responseTextは、JSON形式のデータ
-
var data = null;
-
if (o.responseText) {
-
data = eval(o.responseText);
-
}
-
-
var sel_elem = document.getElementById("sel_foo");
-
-
var item_list = new Array();
-
var key=0;
-
item_list[key] = new Option("(未選択)",key);
-
key++;
-
-
var is_error = false;
-
if (data[0]['bar_error_code']) {
-
var elem = document.getElementById("js_error");
-
if (elem) {
-
var p = document.createElement("p");
-
if (data[0]['bar_error_msg']) {
-
p.innerHTML = data[0]['bar_error_msg'] + '[' + data[0]['bar_error_code'] + ']';
-
}
-
else {
-
p.innerHTML = data[0]['bar_error_code'];
-
}
-
elem.appendChild(p);
-
}
-
is_error = true;
-
}
-
-
if (is_error == false && data) {
-
for (var i in data) {
-
item_list[key] = new Option(data[i].name,data[i].id);
-
key++;
-
}
-
}
-
-
sel_elem.options.length = item_list.length;
-
for (i=0;i<item_list.length;i++) {
-
sel_elem.options[i] = item_list[i];
-
}
-
}
-
-
var handleFailure = function(o) {
-
-
};
-
-
var callback =
-
{
-
success: handleSuccess,
-
failure: handleFailure,
-
argument: ['','']
-
};