PDA

Просмотр полной версии : xml.onLoad = function(); //not success


FFfsam
20.04.2007, 02:22
Здравствуйте!
Наверное глупый вопрос, но для меня важный. Подобный следующему коду взял из хелпа самого флэша:

stop();

function on_load(success){
if(success){
text_out = "succes";
cfg_xml.parseXML();
gotoAndStop(2);
}
else{
text_out = "not succes";
}
}

var cfg_xml:XML = new XML();
cfg_xml.ignoreWhite = true;
cfg_xml.onLoad = on_load();
cfg_xml.load("cfg.xml");

Почему "text_out" всегда "not succes"? означает ли это сfg.xml не подгрузился? И зачем вообще слово "success" в атрибуты функции ставить?
Спасибо.

Kikasso
20.04.2007, 02:32
потому что
cfg_xml.onLoad = on_load;
не результат работы функции, а она сама.
И еще неплохо status проверять:
function on_load(success){
if(!success || this.status < 0){
text_out = "ERROR>" + this.status;
return;
}
// тут все нормально
}

FFfsam
20.04.2007, 13:18
Kikasso
не результат работы функции, а она сама.
Не понял что имели ввиду. Здесь я просто запускаю функцию on_load() по событию onLoad.

А статус вроде можно проверить только после парсинга?
Вообще интересно: функция вызывается, success = undefinded и, соответсвенно text_out = "not succes", а когда смотрю List Variables то загруженный xml там присутствует.

Kikasso
20.04.2007, 13:23
Я имел в виду скобки убрать. У вас функция выполняется в момент "присвоения".

если не верите, напишите так:
cfg_xml.onLoad = on_load(true);, а строчку cfg_xml.load(что-то) закомментируйте.

Парсится xml автоматически, та строчка про parseXML лишняя.

FFfsam
20.04.2007, 13:36
без скобок функция не вызывается

Kikasso
20.04.2007, 13:37
Идите обратно в хелп и посмотрите внимательно.

FFfsam
20.04.2007, 15:08
В общем в первом фрейме:
cfg_xml = new XML;
cfg_xml.ignoreWhite = true;
cfg_xml.load("cfg.xml");
В третьем фрейме:
if(cfg_xml.loaded != true){
trace("false");
gotoAndPlay(2);}
else{
trace("true");
stop();}
Так все заработало.
А так как вы писали у меня не получается. Если не сложно - приведите полностью формат правильной записи.

dhunter
20.04.2007, 16:17
а почему нельзя так написать?

stop()
cfg_xml = new XML;
cfg_xml.ignoreWhite = true;
cfg_xml.load("cfg.xml");
cfg_xml.onLoad = function(success) {
if(success){gotoAndPlay(2);trace("success")}else{trace("not success")}
}

FFfsam
20.04.2007, 17:19
dhunter, ваш код работает!
но если поставить: cfg_xml:XML = new XML вместо cfg_xml = new XML или function(success:Boolean) вместо function(success) (так приведено в хелпе) - то не работает! :)

etc
20.04.2007, 17:21
Потому что типизация должна использоваться вместе с var в данном случае (в первой строке).

FFfsam
20.04.2007, 17:50
пишу var cfg_xml:XML = new XML - не работает, меняю на cfg_xml = new XML - работает.

etc
20.04.2007, 17:53
Публикация под какую версию?

FFfsam
20.04.2007, 17:58
6... и Action Script 1.0...
ой
изначально этот файл создавался под 6 версию...
потом не догадался в настройках публикации посмотреть
и Kikasso оказался прав по поводу скобок - теперь и его вариант заработал :)

etc
20.04.2007, 18:03
Ну типизация с AS2 в шестерку работает.

FFfsam
20.04.2007, 18:36
угу, я уже и сам так сделал :)
но все равно спасибо!