Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

コールバックめんどい

非同期通信やっててよく書くのがコールバック関数なんだけど書くのめんどいぽ。
なので最近はこうしてます。
テクニック?とまではいかないけど。
関数名は適当です。
ハイ。ごめんなさい。

function ahoaho(i,j){
	var ajax = Kumu.Ajax.getS2AjaxComponent();
	ajax.url = 'xxx.do';
	ajax.params = {"no" : i , 'yyyy' : j};
	ajax.doAction = setData;
	Kumu.Ajax.executeAjax(ajax);
}

function setData(response){
    var data = eval('('+response+')');
    for(var v in data){
	var ele = $i(v);
	if(ele){
	    ele.innerHTML = data[v];
	}
    }
}

setDataは使いまわしてます。
objectのkeyをdocumentのidに合わせてガンガン入れ込んでます。
prototype.jsでいうUpdaterなんですけどUpdaterは1要素(1id)なのでチマチマめんどくさい。
(Updaterはinsertもできますけどね)
一気にやりたい時はこーいのでもいいかなと。
ルールとして

  • データはJSONで返す
  • JSONのキーと入れ込む要素のidは同じにする

とすれば楽かなと。

function remoteAction(url,param, callcak){
	var ajax = Kumu.Ajax.getS2AjaxComponent();
	ajax.url = url;
	ajax.params = param;
	if(arguments.length == 2){
		ajax.doAction = setData;
	}else{
		ajax.doAction = callback;
	}
	Kumu.Ajax.executeAjax(ajax);
}

function setData(response){
	var data = eval('('+response+')');
	for(var v in data){
		var ele = $i(v);
		if(ele){
			ele.innerHTML = data[v];
		}
	}
}

使用するときは

function getRemoteData(i,j){
	remoteAction('なんとかsearchAction.do', {"no" : i , 'date' : j});
}

みたいにパラメータに合わせてラッパーを一枚かけば終わりかなと。

あとまあ一応コールバック関数を指定なしでも簡単なレベルであればいけますよと。
(デフォルトの関数入れて動きますよと)
最近、仕事でこんな感じで書いてますよと。
追記
IEだと怒られるとの指摘により修正しました。
うくく。