D0812192 xml読み込みエラーの際、無限ループを回避する方法
Name tsuyosi
Date 2008年12月19日 (金) 22時43分
Message いつも参考にさせて頂いております。

質問させて頂きます。

使用環境:
mac:OSX 10.5
Flash: CS3 AS2.0

外部xmlをから画像を読み込み、フォトギャラリーを制作しているのですが、
xmlが読み込みにエラーが発生した場合の処理方法をアドバイス頂けますでしょうか?

現状はtyr~catchでやってみたのですができずにおります。


現在のAS:

var total;
var myXML = new XML();
var photos = new Array();
var captions1 = new Array();
var captions2 = new Array();
var captions3 = new Array();

myXML.ignoreWhite = true;

function xmlLoad(){
try{
myXML.load("test.xml");
}catch(myError: Error){
xml_text.text="xmlが読み込めませんでした";
trace(myError);
}
}
myXML.onLoad = function (loaded){
if (loaded){
photo_XML = myXML.firstChild;
total = photo_XML.childNodes.length;
current_photo = photo_XML_.firstChild;

for (var i = 0; i < total; ++i){
photos[i] = String(current.childNodes[0].firstChild);
myThumbnail[i] = String(current.childNodes[1].firstChild);
captions1[i] = String(current.childNodes[2].firstChild);
captions2[i] = String(current.childNodes[3].firstChild);
captions3[i] = String(current.childNodes[4].firstChild);
}
}else{}

};
xmlLoad();

以上です。宜しくお願いします。
Response 01
2008年12月21日 (日) 15時24分> joy 
tsuyoshiさん、

xmlの中身は見てませんが、一般的には、以下のようにも記載できると思います。

//ここから
var total;
var myXML = new XML();
var photos = new Array();
var captions1 = new Array();
var captions2 = new Array();
var captions3 = new Array();
myXML.ignoreWhite = true;

/*function xmlLoad(){
try{
myXML.load("test.xml");
}catch(myError: Error){
xml_text.text="xmlが読み込めませんでした";
trace(myError);
}
}*/

xml_txt.text = "";//ダイナミックテキストは、ロード時、ブランク
var error:Number;//読み込み時のエラーコードを代入する変数を定義
myXML.onLoad = function(loaded) {
if (loaded) {//loaded==true;で、
error=this.status;//statusをerrorに代入
if (error == 0) {//0なら
xml_txt.text = "xmlの読み込み成功!";
photo_XML = myXML.firstChild;
total = photo_XML.childNodes.length;
current_photo = photo_XML_.firstChild;
for (var i = 0; i<total; ++i) {
photos[i] = String(current.childNodes[0].firstChild);
myThumbnail[i] = String(current.childNodes[1].firstChild);
captions1[i] = String(current.childNodes[2].firstChild);
captions2[i] = String(current.childNodes[3].firstChild);
captions3[i] = String(current.childNodes[4].firstChild);
}
} else {//0以外なら、そのエラーコードを表示
xml_txt.text = "エラーコード: "+error;
}
trace(error);
} else {//loaded==false;なら
xml_txt.text = "xmlの読み込み失敗!";
}
};
myXML.load("test.xml");
//ここまで
Response 02
2008年12月22日 (月) 02時03分> tsuyosi 
JOYさんへ

返事が遅れてしまい、申し訳あしません。
ご返答ありがとうございます。

JOYさんのアドバイスに修正してみたのですが、
xmlが読めなかった際、Flash Playerがフリーズ状態になり
「ムービー内のスクリプトが原因でFlash Playerの実行速度が遅くなっています。このまま継続すると、応答しなくなることがあります。」
おそらくxmlを探し続けてしまって、上記アラートが出てきてしまうのですが、
これを回避することは可能ですか?
教えて頂けると助かります。

宜しくお願いします。
Response 03
2008年12月22日 (月) 21時50分> joy   
tsuyoshiさん、
適当な、test.xmlを作って、以下のtsuyoshiさんのscript部分を無効にして、プレビューをしても、正常に読み込まれます。
tusyoshiさんのtest.xmlは、XML Editorでチェックして、正常なのでしょうか?

無限ループに陥っているようですが、原因は、私にも、分かりません。

myXML.onLoad = function(loaded) {
if (loaded) {//loaded==true;で、
error=this.status;//statusをerrorに代入
if (error == 0) {//0なら
xml_txt.text = "xmlの読み込み成功!";

/*〜無効とする〜
photo_XML = myXML.firstChild;
total = photo_XML.childNodes.length;
current_photo = photo_XML_.firstChild;
for (var i = 0; i<total; ++i) {
photos[i] = String(current.childNodes[0].firstChild);
myThumbnail[i] = String(current.childNodes[1].firstChild);
captions1[i] = String(current.childNodes[2].firstChild);
captions2[i] = String(current.childNodes[3].firstChild);
captions3[i] = String(current.childNodes[4].firstChild);
}
〜ここまで〜*/

} else {//0以外なら、そのエラーコードを表示
xml_txt.text = "エラーコード: "+error;
}
trace(error);
} else {//loaded==false;なら
xml_txt.text = "xmlの読み込み失敗!";
}
};
myXML.load("test.xml");

このページの先頭へ