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); }; } }
コメントを残す