PDA

Просмотр полной версии : Не грузится XML ;-(


feodus
23.07.2006, 23:42
подскажите плизз...
вот обычный кусок загрузки XML файла, который находится в том же каталоге что и FLA...
делается на 8-ке.

var menuXML:XML = new XML();
menuXML.ignoreWhite = true;
menuXML.load("menuSystem.xml");
menuXML.onLoad = myParser;

При компиляции выдает:
Error opening URL "file:///H|/menuSystem.xml"

что ему не так ??? А ???

feodus
24.07.2006, 02:18
заметил еще что ...если в пути есть символы "_" или "!" он заменяет их на "%21" и прочую лабуду...
Кстати в приведенном примере он в пути, указанном в ошибке забыл про каталог, в котором собственно находится файл...не указал.

DJ_Baton
24.07.2006, 03:17
попробуй не использовать заглавных букв в именах файлов, может поможет

KUZEN
24.07.2006, 04:27
var menuXML:XML = new XML();
menuXML.ignoreWhite = true;
menuXML.onLoad = myParser;
menuXML.load("menuSystem.xml");
и проверь пути может не оттуды грузишь

olegn
24.07.2006, 12:51
И еще, у тебя в пути нигде в имени каталога имен с кирилицей не встречается? В этом случае не работает.

inspace
24.07.2006, 13:09
И посмотри в какой кодировке сохранен документ.

Badim
24.07.2006, 14:19
а еще onLoad надо перед load определить.

silin
24.07.2006, 14:25
во наговорили: не использовать заглавных букв, имен с кирилицей , в какой кодировке сохранен..
все это важно, канеш, тока сказано ж: Error opening URL "file:///H|/menuSystem.xml"
вот и смотри есть на H: такой файл?
к слову FLA у тебя тоже на H: лежит ?, если нет то смотри в Publish settings куда экспортится swf..

F_Flash
24.07.2006, 14:30
а еще onLoad надо перед load определить.
не верно, порядок не важен, событие оnLoad стработает минимум только на следущем кадре, в этот момент фукция для onLoad будет определена.

iNils
24.07.2006, 15:58
не верно, порядок не важен, событие оnLoad стработает минимум только на следущем кадре, в этот момент фукция для onLoad будет определена.И в однокадровом скрипте тоже? Badim верно сказал, у Мука кстати тоже это для XML упомянуто.

F_Flash
24.07.2006, 16:18
И в однокадровом скрипте тоже? Badim верно сказал, у Мука кстати тоже это для XML упомянуто.

xml=new XML();
xml.load("minemenu.xml");
trace("send request");
xml.onLoad=function(){
trace("xml loaded");
}
frame=1;
this.onEnterFrame=function(){
trace("frame=" + Number(frame++));
}


Приведи пример кода когда событие onLoad стработет в том же фрейме в котором был вызван метод load Понятие frame подразумеваентя не квадратик на таймлайне, а реально оброработка окончание флешового фрейма

olegn
24.07.2006, 16:26
По-моему iNils прав. И Мук тоже прав. Математические расчеты типа frame++ здесь не помогут, поскольку рассматриваемые события как известно асинхронные. Другое дело, что при тестировании на сервере, да и локально тоже, есть небольшая задержка, которая дает возможность после старта загрузки успеть инициализироваться событию onLoad, пусть даже и определенному после. И по этой причине эту ситуацию практически нереально отловить. Но можно. В среде тестирования Flash, на относительно быстром компьютере, иногда удается ее воспроизвести в чистом виде: асинхронно загружается XML, так быстро, что onLoad не успевает...

silin
24.07.2006, 16:35
если onLoad определена как function onLoad(){}, то поровну где ее размещать: компилятор сам ее передвинет в начало..
а если как ссылка на безымянную функцию onLoad=function(){}, то не поровну, потому как сами знаете почему..

F_Flash
24.07.2006, 16:45
По-моему iNils прав. И Мук тоже прав. Математические расчеты типа frame++ здесь не помогут, поскольку рассматриваемые события как известно асинхронные. Другое дело, что при тестировании на сервере, да и локально тоже, есть небольшая задержка, которая дает возможность после старта загрузки успеть инициализироваться событию onLoad, пусть даже и определенному после. И по этой причине эту ситуацию практически нереально отловить. Но можно. В среде тестирования Flash, на относительно быстром компьютере, иногда удается ее воспроизвести в чистом виде: асинхронно загружается XML, так быстро, что onLoad не успевает...
:)


xml=new XML();
xml.load("minemenu.xml");
trace("send request");

frame=1;

for(i=1;i<2000000;i++){
}
xml.onLoad=mf;
this.onEnterFrame=function(){
trace("frame=" + Number(frame++));
}
function mf(){
trace("xmlloaded");
}



Пожалуйста, нет проблем поставим задержку до объявления функции on load. собылие onload никогда не стработет в том же кадре где был вызван метод load . Соотвественно функция onload успеет инициализироваться.

olegn
24.07.2006, 17:20
ок, я быстро не смог въехать в этот пример, но спор не стоит продолжения.

Вопрос скорее философский, вернее, вопрос чистоты стиля. Потому что можно определить onLoad после вызова команды load, и в 99% и 99 в периоде это будет работать. Потому что пара строк кода априори выполнится быстрее, чем самое быстрое асинхронное событие.
Возражение (и вышеупомянутый совет Мука) вызван, как мне кажется, другим:
представьте ситуацию:
Вы говорите кому-то:
" после того, как я скажу "давай!" сделай то-то и то-то".
Это нормально, это будет работать.
А теперь представьте: Вы говорите (этому же человеку): "Я тебе скажу 'давай', а ты сделай!"
Вам уже смешно? Так этот человек спросит, если не дурак, "А что делать надо?" А Вы ему отвечаете: "Вот после команды 'Давай' и узнаешь..."
Резюме: все зависит от быстроты соображения этого человека (если он предпочитает медленно думать, он не согласится так поступать), но в любом случае это не-комфортный и чреватый алгоритм поведения, правильно ведь? Вот об этом и говорят, когда рекомендуют ЗАДАВАТЬ ПРАВИЛА ДО ТОГО, КАК ДАТЬ КОМАНДУ ИХ ИСПОЛЬЗОВАТЬ.
ОК, я заканчиваю полемику, работать надо.

F_Flash
24.07.2006, 17:29
ок, я быстро не смог въехать в этот пример, но спор не стоит продолжения.
Вопрос скорее философский, вернее, вопрос чистоты стиля. Потому что можно определить onLoad после вызова команды load, и в 99% и 99 в периоде это будет работать. Потому что пара строк кода априори выполнится быстрее, чем самое быстрое асинхронное событие.
Возражение (и вышеупомянутый совет Мука) вызван, как мне кажется, другим:
представьте ситуацию: Вы говорите кому-то: после того, как я скажу "давай!" сделай то-то и то-то. Это нормально, это будет работать.
А теперь представьте: Вы говорите (этому же человеку): "Я тебе скажу 'давай', а ты сделай!"
Вам уже смешно? Так этот человек спросит, если не дурак, "А что делать надо?" А Вы ему отвечаете: "Вот после команды 'Давай' и узнаешь..."
Резюме: все зависит от быстроты соображения этого человека (если он предпочитает медленно думать, он не согласится так поступать), но в любом случае это не-комфортный и чреватый алгоритм поведения, правильно ведь? Вот об этом и говорят, когда рекомендуют ЗАДАВАТЬ ПРАВИЛА ДО ТОГО, КАК ДАТЬ КОМАНДУ ИХ ИСПОЛЬЗОВАТЬ.
ОК, я заканчиваю полемику, работать надо.



Вопрос идет важен или не важен проядок, а чистота кода это другой вариант. И полемка на человеческих примерах думаю не самый лучший варинт сравнения для данной ситуации:)

olegn
24.07.2006, 17:34
ок :wacko:

feodus
24.07.2006, 17:40
Если кому-то еще интересно:

Помогло средство от DJ Baton "попробуй не использовать заглавных букв в именах файлов, может поможет"

Каталог, который не показывался в сообщении об ошибке содержал заглавные....после исправления все забегало...
Спасибо всем !

soloveich
28.09.2006, 01:02
у меня та же фигня, только ничего из выше перечисленного меня не спасёт т.к. этого нет. идёт стандартное loadVariablesNum("test.txt",0); а ошибку выдаёт следующую Error opening URL "file:///C|/Documents%20and%20Settings/TEMP/Desktop/New%20Folder/%3F%3F%3F%3F%3F%3F/%3F%3F%3F%3F%3F%3F%3F%3F%3F/Untitled%2D4.swf"

з.ы.
знаю, что чайник. :) если кто то знает пожалуйста ответте т.к. срочно надо :)

soloveich
28.09.2006, 02:18
народ реально надо...

F_Flash
30.09.2006, 19:30
прикол:) грузишь txt а ошибку выдает на Untitled%2D4.swf :)

txt читается значит смотри формат файла самого