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;
}
}

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2007/07/11 11:28:27
  • 終了:2007/07/15 20:14:33

回答(2件)

id:NYO No.1

NYO回答回数35ベストアンサー獲得回数82007/07/11 11:54:50

ポイント35pt

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

id:hide355

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

2007/07/11 13:01:35
id:ken1bf7 No.2

ken1bf7回答回数25ベストアンサー獲得回数12007/07/11 13:15:59

ポイント35pt

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

 

本題ですが

 

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の取得開始

id:hide355

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

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

2007/07/11 13:31:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません