歯ブラシ選びの大事なポイントとは?

xmlの読み込みをしていますが、
最後のtraceで内容が表示されません。nullになります。

var myXML:XML;
var imgSrc:String ;

var url:URLRequest = new URLRequest("test.xml");
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
xmlLoader.load(url);

xmlLoader.addEventListener(Event.COMPLETE, comp);
function comp(event:Event):void {
myXML = XML(xmlLoader.data);
imgSrc = myXML.img[0];
}
trace(imgSrc);←ここがnullです。

function内でtraceすると問題なく表示されるのですが、
一体どうしてでしょうか。

ご教授お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ActionScriptってのはオブジェクト指向で


順次実行型のスクリプトではないですからね

xmlのロードが実行されてはじめて
imgSrcに値が入るので
compの実行を待たずにimgSrcの
中身をみてもnullなのは当然です
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

すいません、あんま理解していないのですが、
上記の書き方だと、functionが実行される前に
traceが実行されているということですよね。。。

もしよろしければ、具体的にどうしたらよいか
お聞かせいただけると幸いです。

それとも、function外でimgSrcの値を
とる方法はないということでしょうか。。。

お礼日時:2010/04/02 21:09

> 上記の書き方だと、functionが実行される前に


> traceが実行されているということですよね。。。

そうですよ。
xmlLoader.addEventListener(Event.COMPLETE, comp);
によってXMLのロード完了時に関数compが実行されます。
当たり前ですが,
XMLのロードが完了しないとXMLの内容などわかりません。
XMLのロードが完了して中身を閲覧や操作できるような状態になって
関数compが実行されるということです。

というか,
そのために(関数compを即実行させないために)
xmlLoader.addEventListener(Event.COMPLETE, comp);
を用意しているはずです。


>それとも、function外でimgSrcの値を
>とる方法はないということでしょうか。。。

関数comp内で別の関数を実行させて,
その別関数の中に
trace(imgSrc);
を書いておくのも1つの方法です。

また,書かれていらっしゃるスクリプトを書いたフレームで,
そのフレームの再生を停止させておいて( stop() させておいて)
関数compの中で次のフレームに進むなどのスクリプトを書いて
次のフレームに
trace(imgSrc);
を書いておくのも1つの方法です。
例:フレーム1 で XMLをロードし
  ロード完了次第 フレーム2 に進めて
  フレーム2 以降で本体のスクリプトを動作させる。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!!!!

大変助かりました!
今回はcomp内に引数を持たせて別のfunctionを呼ぶ
方法で対処いたしました!!!

ありがとうございます!

お礼日時:2010/04/03 17:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング