人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Flash ActionScriptのクラスについて

外部XMLを取得して変数に入れるという単純なものを作成したのですがonLoadで実行されるfunctionは非同期であるためクラスをnewした直後だと値がundefinedとなってしまいます。
どうすれば同期処理することができるでしょうか。

//タイムライン側
var myData:getData = new getData();
trace(myData.atai); //ここでundefined

//クラス側
class getData {
var requestURL:String = "http://localhost/data/data.xml";
var replyData:XML;
var atai:String;

public function getData() {
System.useCodepage = true;
this.replyData = new XML();
this.getData();
}

function getData() {
this.replyData.ignoreWhite = true;
this.replyData.Load(this.requestURL);
this.replyData.onLoad = analyzeXML;
}

function analyzeXML(){
var myXML = this;
//XMLデータを解析解析し変数に格納
this.atai = myXML.firstChild.childNodes[0].firstChild;
}
}

●質問者: hide355
●カテゴリ:ウェブ制作
✍キーワード:ActionScript Class Flash String trace
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● NYO
●35ポイント

XMLは基本的には非同期通信です。

同期させるためには読み込み完了まで待機させて、


onLoad{if(success){処理}}


にすればよいです。

▼Adobe Live Docs onLoad

http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/common/...

▼JAVAC.JP

http://www.javac.jp/flash/flashlab/graph/page4_2.html

◎質問者からの返答

「読み込み完了まで待機」する方法を教えてもらえますか?


2 ● ken1bf7
●35ポイント

まず、コンストラクタとおなじ名前のメソッドの定義があるのはまずいです。

本題ですが

XMLの読込みを行うクラスを作成し、それを使う際に

流れを切り分け、もとにクラスの実装を考えてみてください。

クラスをnewする

|

XMLのロード完了通知イベントを受け取りを設定

|

XMLの読込み開始を実行

■Class側

class getData {

var requestURL:String = "http://localhost/data/data.xml";

var replyData:XML;

var atai:String;

var onXmlLoad:function;

public function getData() {

System.useCodepage = true;

this.replyData = new XML();

}

function getXMLData() {

this.replyData.ignoreWhite = true;

this.replyData.onLoad = analyzeXML;

this.replyData.Load(this.requestURL);

}

function analyzeXML(){

var myXML = this;

//XMLデータを解析解析し変数に格納

this.atai = myXML.firstChild.childNodes[0].firstChild;

onXmlLoad();

}

■使い方

//タイムライン側

var myData:getData = new getData();

myData.onXmlLoad =function(){//XMLロード完了イベント受け取りを宣言

trace(myData.atai);

}

myData.getXMLData();//XMLの取得開始

◎質問者からの返答

抜粋したため名前がかぶってました;;

教えて頂いた通りに記述してみたところ挙動が変わりましたがデバッグでステップ実行してみると「onXmlLoad();」で抜けてしまうようです。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ