PDA

Просмотр полной версии : Помогите советом или логикой по SendAndLoad


UnOuter
26.03.2007, 18:01
В общем вопрос такой. Не могу сообразить как это сделать.

Есть скажем на форме Кнопка. При нажатии на которую я должен послать и получить данные, и в зависимости от того, что получил - сделать определенные действия.

Вот мой код (он рабочий) Все принимает и все отсылает. НО...
При нажатии на кнопку данные не успевают приняться с сервера, перед тем как срабатывает условие при котором нужно обработать эти данные.

Вопрос: Как отследить, что данные УЖЕ принялись, и после чего выполнить уже с полученными данными - это условие.




on (release) {
var content_arr = new Array();
myData = new LoadVars();
myData.login = this.login_var;
myData.sendAndLoad(_root.file_path, myData, 'POST');
myData.onLoad = function(succes) {
if (succes) {

//Тут мы принимаем данные
content_arr["err_var"] = this.err_var;
//Их очень-очень много
} else {
trace("Error loading data");
//this.login_var = "Ошибка передачи данных";
}

//Вот тут условие которые выполняется в зависимости от того что получили
trace(content_arr["err_var"]);
if (content_arr["err_var"] == "1") {
_root.nextFrame();
} else if (content_arr["err_var"] == "0") {
_root.error_code._visible = true;
//Делаем ошибку неправильнного ввода кода невидимой
}
};
}

etc
26.03.2007, 18:20
Для оформления кода нужно использовать теги , а не .

gct
26.03.2007, 18:56
Читаем родной хэлп

The following example loads a text file and displays information in the Output panel when the operation completes.


var my_lv:LoadVars = new LoadVars();
my_lv.onLoad = function(success:Boolean) {
trace("LoadVars loaded successfully: "+this.loaded);
};
my_lv.load("http://www.helpexamples.com/flash/params.txt");



Пишем правильно:
- success
- _root.error_code._visible = true;
//Делаем ошибку неправильнного ввода кода невидимой

не знаю как у кого, но у меня создалось впечатление, что в этой строке ты сделал "ошибку неправильнного ввода кода" видимой

UnOuter
26.03.2007, 19:11
Собственно ничего не изменилось...
Не хочет оно выполнять условие....

Хочу отменить, что у меня Flash сначала посылает данные в PHP, потом принимает! ...

etc
26.03.2007, 19:24
А почему вторую часть условий нельзя было запихнуть в первый if?

UnOuter
26.03.2007, 19:28
Можно, запросто, но вот только толку от этого тоже 0. Ничего не меняется! Не выполняется оно и все...

etc
26.03.2007, 19:35
В приведенном коде ошибок в принципе нет. Не считая логической:

_root.error_code._visible = true;
//Делаем ошибку неправильнного ввода кода невидимой
В комментарии одно, а делаем как раз наоборот.

Откуда происходит загрузка данных? Удачна ли загрузка полученных данных или нет?

gct
26.03.2007, 19:38
А функции проверок на ошибки загрузки и содержания массива срабатывают на ошибки?

сори за повтор

UnOuter
26.03.2007, 19:46
Да, данные получает.. трассируется все нормально...

на счет коммента там все в порядке.. там просто описка. Я проверяю это на уровне дебагера.

НЕ срабатывает условие

if (content_arr["err_var"] == "1") {
trace(content_arr["err_var"]);
} else if (content_arr["err_var"] == "0") {
_root.error_code._visible = true;
//Делаем ошибку неправильнного ввода кода видимой
_root.error_code.gotoAndPlay(1);
_root.login_block.gotoAndPlay(6);
}


Скорее всего оно просто не успевает отрабоать!
в общем даже не знаю...

gct
26.03.2007, 19:50
Ну если сделать как __etc посоветовал с условиями, то оно как-то пологичней будет ну и, в принципе, должно "успеть" отработать.

UnOuter
26.03.2007, 19:54
но не отробатывает же... :(

etc
26.03.2007, 20:19
Так проверь content_arr["err_var"] вне условия. Если не 1, то и трейсить нечего.

UnOuter
27.03.2007, 11:42
Да в том то и дело что content_arr["err_var"] = 1.

Суть в том что с
content_arr["err_var"] = 1
по мимо этого мы принимаем кучу данных. И вот тут оно и глохнит (мол не успевает все принять, или я не знаю, что).

Если content_arr["err_var"] = 0 то мы больше ничего не принимаем, то есть принимаем только content_arr["err_var"] и так как переменнатя только одна то оно естессно все быстро отрабатывает

etc
27.03.2007, 11:46
Выкладывайте исходник всего-всего. Гадать на кофейной гуще надоело.

UnOuter
27.03.2007, 11:59
Исходник сложно выложить, он большой и неудобный, там целая система.
Обьясняю логику, что мне нужно, было бы здорово просто простейший пример корректной работы данной штуки.

Есть форма.
Вводим число допустим 100.
Нажимаем отправить.
По нажатию кнопки данные из флеша посылаются PHP.

PHP сверяет.
Если мы приняли 100 то возвращаем "1"
И посылаем еще кучу всяких переменных с данными.
если что-то другое то "0".
После этого? результат отправляем обратно во флеш, и там уже смотрим. Если вернули "1" то читаем в массив кучу данных каких-то, любых и переходим на кадр 2 , если 0 то на кадр "3".

Обращаю внимания, что в моем примере все операции приема-отпарвки данных работаю только в процедуре on (release) {}

etc
27.03.2007, 12:04
Я ничем помочь не могу в данном случае. Если условие не выполняется, значит значение в массиве (кстати, надо было использовать объект) неверно и точка.

UnOuter
27.03.2007, 12:10
Расскажи пожалуйста..
что значит "Значение в массиве" и что значит "Использовать объект"

etc
27.03.2007, 12:34
Ну использовать Array для присвоения строковых ключей можно, но непонятно, зачем. По большому счету, в Array числовые индексы все-таки должны быть. Я имею ввиду использовать new Object, а не new Array. Хотя в данном случае это не принципиально.
Я даже не вижу смысла использовать отдельный массив/объект. Зачем, если есть LoadVars уже со всеми переменными?

UnOuter
27.03.2007, 14:16
Массив я использую для того, чтобы в других частях проекта можно было его легко использовать.

В общем, ЗАРАБОТАЛО! спасибо агромное за ответ №16. Он подтолкнул меня на то, чтобы я еще раз пересмотрел значение content_arr["err_var"]. Оказалось что оно было равно 1 + куча пробелов после, что собсвенно не могло быть равно 1 по условию.
Спасибо, ребята!