PDA

Просмотр полной версии : Проблемы с XML


intro
24.10.2006, 17:41
Вот кусок кода:
_global.xml_array = new Array();
var my_xml:XML = new XML(); //Блок подключения и загрузки XML
my_xml.ignoreWhite = true;
my_xml.load("http://10.182.3.13/current_measure_xml/doXML.php");
my_xml.onLoad = function(ok) {
if (ok) {
for (j=0; j<575; j++) {
_global.xml_array[j+1] = new Array;
_global.xml_array[j+1].val=my_xml.childNodes[0].childNodes[j].childNodes[0].childNodes[0].nodeValue;
_global.xml_array[j+1].typ=my_xml.childNodes[0].childNodes[j].childNodes[1].childNodes[0].nodeValue;
_global.xml_array[j+1].time_stamp=my_xml.childNodes[0].childNodes[j].childNodes[2].childNodes[0].nodeValue;
_global.xml_array[j+1].ent_name=my_xml.childNodes[0].childNodes[j].childNodes[3].childNodes[0].nodeValue;
_global.xml_array[j+1].tag_name=my_xml.childNodes[0].childNodes[j].childNodes[4].childNodes[0].nodeValue;
//-------------------------------------------//
trace(_global.xml_array[j+1].val);
trace(_global.xml_array[j+1].typ);
trace(_global.xml_array[j+1].time_stamp);
trace(_global.xml_array[j+1].ent_name);
trace(_global.xml_array[j+1].tag_name);
};
};
Дело в том, что XML не загружается до конца. Вопрос: событие onLoad срабатывает только тогда когда XML полностью загружен или тогда, когда он начинает загрузку?

etc
24.10.2006, 18:09
onLoad вызывается после загрузки XML.

intro
24.10.2006, 18:17
Так в чём может быть проблема? Может есть какие-то ограничения? У меня из 575 полей заполняет только 557. С самим XML всё впорядке, он через браузер грузится до конца, время на это уходит где-то секунд 5, а вот во флэше всё как-то быстрее, такое чуство, что не до конца загружает.

etc
24.10.2006, 18:27
Проверяй trace-ом, что загрузилось.

intro
24.10.2006, 18:39
Так проверил же... Загрузилось до 557 включительно, дальше "андифинед" и всё. При том, что всё время до 557.

etc
24.10.2006, 18:42
Проверь трейсом весь XML, для начала. Т.е. выведи в аутпут весь XML.

intro
24.10.2006, 19:10
В аутпут вывело весь XML. Странно... Есть ли какие-то ограничения у массива? Теперь ясно, что проблема в заполнении массива, но почему же он заполняется до 557 поля нормально, а потом нет?

intro
24.10.2006, 19:18
Вот полный текст. Может быть проблема в том, что массив неуспевает заполниться до конца, как к нему уже начинает обращатся другая функция?
//Добавление свойства изменения цвета у объектов
//----------------------------------------//
MovieClip.prototype.id = function(color){
a = new Color(this);
a.setRGB(color);
};
colors_1 = [];//красный
colors_2 = [];//фиолетовый
colors_3 = [];//жёлтый
colors_4 = [];//белый
colors_5 = [];//зелёный
colors_1[1] = 0xff0000;
colors_1[16] = 0xff0000;
colors_1[272] = 0xff0000;
colors_2[1] = 0x6633CC;
colors_3[1] = 0xFFFF00;
colors_4[1] = 0xFFFFFF;
colors_5[1] = 0x006633;
//----------------------------------------//
//Заполнение массива данными из XML файла
//----------------------------------------//
_global.xml_array = new Array();
var my_xml:XML = new XML(); //Блок подключения и загрузки XML
my_xml.ignoreWhite = true;
my_xml.load("http://10.182.3.13/current_measure_xml/doXML.php");
my_xml.onLoad = function(ok) {
if (ok) {
for (j=0; j<575; j++) {
_global.xml_array[j+1] = new Array;
_global.xml_array[j+1].val=my_xml.childNodes[0].childNodes[j].childNodes[0].childNodes[0].nodeValue;
_global.xml_array[j+1].typ=my_xml.childNodes[0].childNodes[j].childNodes[1].childNodes[0].nodeValue;
_global.xml_array[j+1].time_stamp=my_xml.childNodes[0].childNodes[j].childNodes[2].childNodes[0].nodeValue;
_global.xml_array[j+1].ent_name=my_xml.childNodes[0].childNodes[j].childNodes[3].childNodes[0].nodeValue;
_global.xml_array[j+1].tag_name=my_xml.childNodes[0].childNodes[j].childNodes[4].childNodes[0].nodeValue;
//-------------------------------------------//
/*trace(_global.xml_array[j+1].val);
trace(_global.xml_array[j+1].typ);
trace(_global.xml_array[j+1].time_stamp);
trace(_global.xml_array[j+1].ent_name);
trace(_global.xml_array[j+1].tag_name);*/
};
};

/*trace(_global.xml_array[558].val);
trace(_global.xml_array[558].typ);
trace(_global.xml_array[558].time_stamp);
trace(_global.xml_array[558].ent_name);
trace(_global.xml_array[558].tag_name);*/
};

intID1 = setInterval(color_,100);
function color_() {
//Зарисовка выключателей "Гродно-330"
Gro_v_1.id(colors_1[parseInt(_global.xml_array[180].val)]);
Gro_v_2.id(colors_1[parseInt(_global.xml_array[189].val)]);
Gro_v_3.id(colors_1[parseInt(_global.xml_array[188].val)]);
Gro_v_4.id(colors_1[parseInt(_global.xml_array[179].val)]);
Gro_v_5.id(colors_1[parseInt(_global.xml_array[181].val)]);
Gro_v_6.id(colors_1[parseInt(_global.xml_array[187].val)]);


//-------------------------------------------------------------//
//Вывод данных телеметрии
//ГРОДНО-330
gr_t_1.text = _global.xml_array[165].val + 'кВ';
gr_t_2.text = _global.xml_array[324].val;
gr_t_3.text = _global.xml_array[323].val;
gr_t_4.text = _global.xml_array[172].val;
gr_t_5.text = _global.xml_array[154].val;
gr_t_6.text = _global.xml_array[177].val;
gr_t_7.text = _global.xml_array[160].val;
gr_t_8.text = _global.xml_array[173].val;
gr_t_9.text = _global.xml_array[155].val;
gr_t_10.text = _global.xml_array[175].val;
gr_t_11.text = _global.xml_array[157].val;
gr_t_12.text = _global.xml_array[174].val;
gr_t_13.text = _global.xml_array[156].val;
gr_t_14.text = _global.xml_array[163].val+'кВ';
gr_t_15.text = _global.xml_array[170].val;
gr_t_16.text = _global.xml_array[161].val;
gr_t_17.text = _global.xml_array[171].val;
gr_t_18.text = _global.xml_array[150].val;
gr_t_19.text = _global.xml_array[145].val;
gr_t_20.text = _global.xml_array[152].val;

};
stop();
intID2=setInterval(function(){Play();},30000);

etc
24.10.2006, 19:22
Приведу цитату Вани:
- сорри, но встречая такой код, я включаю на максимум в наушниках
группу "Кровосток", песню "Жесть", понимаю, что в жизни бывает и хуже
и переделываю такой код с нуля.
Я с ним полностью согласен.

intro
25.10.2006, 10:45
Спасибо за содержательный ответ. Что же я могу сделать, если только начинаю работать с флэшем. Какой бы ни был код, но он работал :)

etc
25.10.2006, 10:56
Нет, я просто хочу сказать, что код проще переписать заново, чем искать в нём ошибку…

intro
25.10.2006, 14:05
Эх, это был чуток кода... Но проблема именно в заполнении массива. Ладно, буду ковыряццо... :)