<script type="text/javascript"> var meta; // ------------------------------------------------------- // Metaクラスのオブジェクト定義 function Meta(title, description) { if(title){ this.title = title; } if(description){ this.description = description; } } Meta.prototype = { title: null, description: null, setTitle: function(title){ this.title = title; }, setDescription: function(description){ this.description = description; }, getTitle: function(){ return this.title; }, getDescription: function(){ return this.description; } }; //--------------------------------------------------------- // 外部サービスから情報を取得してsetMetaを呼び出し function getMetaInfo(imageid){ var url = "./getMetaInfo.php"; var params = "id=" + imageid; var ajax = new Ajax.Request( url, { method: 'get', parameters: params, onComplete: setMeta } ); } function setMeta(ajax,json){ title = json.title; alert(title); ←ちゃんと出力される meta.setDescription(json.description); alert(meta.description); ←ちゃんと出力される meta.setTitle(json.title); } // こっから問題 // start meta = new Meta(); getMetaInfo(232716791); alert(meta.title); ←出力されない!!!!!!(ていうかnull)
これって、getMetaInfoから呼び出されたsetMetaが、グローバルにしたつもりのmetaの変数を変更できてないってことよねえ。なんでだろう・・・・どうすればいいのかな。両方のメソッドを、Metaクラスの中に移せばいいだろうか?
ちょっと気になったのだけど、alert(meta.title)が先に出てから、alert(title)が出るんだよね。これってAjaxだから、getMetaInfoが戻ってくる前にmeta.titleが呼び出されているってことになるんだろうなきっと・・・。非同期の部分をfalseにしたらうまく動きそうな気がしてきました。
って、いやいや、onCompleteだからねえ・・・