jQueryのajax()関数で、successの関数に引数を渡したい。
以下の用に無名関数とか書いちゃえばいいんだけど、スコープが広くりすぎるとなにか気持ち悪い。
そんなときはクロージャがいいな。
var Hoge = {
fuga : function(url,id){
$.ajax({
dataType : 'json',
url : "hogehoge",
context : this,
success : function(json,status,xhr){
this.uga(id,json,status,xhr);
}
});
},
uga : function(id,json,status,xhr){
alert(id);
}
}
ちゃんと調べてないのですが、たぶんsuccessが実行されるまで変数urlなどへの参照を保持する必要があり微妙にメモリを食いそう。
それよりなによりクロージャーを使えば以下のとおりすっきりできました。
可読性がいい。
var Hoge = {
fuga : function(url,id){
$.ajax({
dataType : 'json',
url : "hogehoge",
context : this,
success : uga(id)
});
},
uga : function(param_id){
var id = param_id;
return function(json,status,xhr){
alert(id);
};
}
}
コメントを残す