Просмотр полной версии : Неадекватное исполнение метода LoadVars.sendAndLoad()
У меня есть мой код, в нём циклично создаются пустые клипы, в которые циклично загружаются клипы из библиотеки. Потом они все разворачиваются под разными углами и проверяются на возможность выхода за пределы сцены. А потом запускаются. В одном пустом клипе могут быть несколько клипов. Метод
LoadVars.sendAndLoad()
находится вне пределов кода цикла. И этот метод перестаёт работать, если итераций цикла больше 17:
for(var i = 0; i<30; i++) {
//Здесь создаются клипы и задаются их свойства
}
derevo.sendAndLoad(...) //Здесь это НЕ работает
for(var i = 0; i<17; i++) {
//Здесь создаются клипы и задаются их свойства
}
derevo.sendAndLoad(...) //Здесь это работает
Хотя даже в первом случае
trace(derevo.sendAndLoad(...)); //Выводит true
Вы не могли бы мне это объяснить?
Маловато кода... непонятно.
Что-то вас не понятно. Сперва вы пишите, что у вас "циклично загружаются клипы из библиотеки", а в разрозненных строчках вашего вопроса речь идет о LoadVars и его методах.
Приведите-ка полный кусок кода. Да и вопрос уточните.
var derevo:LoadVars = new LoadVars();
var resultDerevo:LoadVars = new LoadVars();
derevo.load("../dermo.txt");
derevo.onLoad = function() {
for (var i = 0; i<30; i++) {
_root.createEmptyMovieClip("name"+i+"_mc",_root.getNextHighestDepth());
for (var d = 0; d<8; d++) {
_root["name"+i+"_mc"].attachMovie(derevo["name"+(i+1)].charAt(d)+"clip","clip"+d,d+1+(8*i),{_x:0+30*d, _y:0});
}
_root["name"+i+"_mc"]._x = derevo["name"+(i+1)+"_x"];
_root["name"+i+"_mc"]._y = derevo["name"+(i+1)+"_y"];
_root["name"+i+"_mc"]._rotation = derevo["rotation"+(i+1)];
for (d=10; d<1015; d++) {
while (_root["name"+i+"_mc"].hitTest(d, 50)) {
_root["name"+i+"_mc"]._y += 1;
}
while (_root["name"+i+"_mc"].hitTest(d, 718)) {
_root["name"+i+"_mc"]._y -= 1;
}
}
for (d=50; d<719; d++) {
while (_root["name"+i+"_mc"].hitTest(10, d)) {
_root["name"+i+"_mc"]._x += 1;
}
while (_root["name"+i+"_mc"].hitTest(1014, d)) {
_root["name"+i+"_mc"]._x -= 1;
}
}
}
_root.onEnterFrame = function() {
for (var i = 0; i<30; i++) {
for (var d = 0; d<8; d++) {
eval("name"+i+"_mc.clip"+d).play();
}
}
delete this.onEnterFrame;
};
derevo.num = Number(visitors.num)+1;
derevo.name1 = "bobik";
derevo.sendAndLoad("FlashDataHandler.ashx",resultDerevo,"GET");
}
Здесь
derevo.sendAndLoad(...);
не работает, но если в условии самого первого цикла вбить
for(var i = 0; i<17; i++) {
...
}
, то "sendAndLoad" заработает. Из-за чего это происходит?
Почему у вас вызов derevo.sendAndLoad(....); записан внутри его же обработчика onLoad?
var derevo:LoadVars = new LoadVars();
var resultDerevo:LoadVars = new LoadVars();
derevo.load("../dermo.txt");
derevo.onLoad = function() {
...
derevo.sendAndLoad("FlashDataHandler.ashx",resultDerevo,"GET");
}
Вот это действительно неадекватное исполнение методов LoadVars.
Да там всё нормально. После загрузки и исполнения кода обновлённые данные отправляются на серверную страницу и ответ загружается в другую переменную и не может быть рекурсии. А ведь "onLoad" - это асинхронная функции и она будет выполняться в самом конце. Вне обработчика "onLoad" все данные переменной "derevo" были бы недоступны.
Script time limit скорее всего превышается... Оптимизируйте свой код.
Ссылку на текущий мувиклип ("name"+i+"_mc" который) хотя-бы в переменную записывайте что-ли. Посчитайте сколько у вас лишних вычислений получается.
Сникерс, а вы в курсе, что у вас все переменные, полученные в derevo после этой загрузки derevo.load("../dermo.txt");
попадают вновь в GET-запрос по новой даже без явного присвоения типа derevo.name1 = "bobik";
?
То есть все вот эти derevo["name"+...] вновь образуют пары "переменная=значение" и вновь отправляются на сервер уже при derevo.sendAndLoad. Сколько у вас их там, 30 пар? И сама onLoad тоже уходит на сервер в виде строки onLoad=%5Btype%20Function%5D
Я бы все-таки разделил экземпляры LoadVars. Или вы так задумали?
Точно так, udaff. Я объявил такую переменную и теперь метод "sendAndLoad" работает доже после 21-ой итерации цикла. Только как теперь мне ещё больше упростить код, там по-моему в остальном это нельзя сделать. А может быть изменить значение "Script time limit" и сделать его больше?
Да, mooncar, это правда, я знал, что туда отправляются все пары. Из этого кадра мне нужно отправить только "derevo.num". Я подумал, что буду отправлять всё вместе, потому что всё равно остальное не будет изменяться. Пока я тестирую на двух объектах, то есть пока у меня отправляется 8 пар "имя-значение", но всего их может быть до 120-ти. А пока создаются только 2 клипа, но с изменением количества итераций цикла "sendAndLoad" не работает. udaff оказался прав и мне надо оптимизировать мой код, только я не знаю что ещё сделать. Может быть изменить значение "Script time limit"?
1. Разделите экземпляры LoadVars. Для каждого действия все-таки лучше свой экземпляр.
2. Используйте не GET, а POST. Все-таки в адресной строке передавать такое количество данных как-то нехорошо - 120 пар, как вы говорите.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.