PDA

Просмотр полной версии : Незаполняется массив


Almik
26.08.2004, 18:40
вот код 1 фрейма
--------------------------------------
var vuz= new Array();
var acts= new Array();


loadVariablesNum(".....", _self); //загружаю переменные a и b

_root.onData = function() {

vuz[0] = a;
acts[0] = b;

}

-----------------------------------------

проблема в том, что в итоге массив пуст. переменные грузятся точно, проверял.

если кто-то сможет приветси пример загрузки массива через loadVars буду очень благодарен.

fiot
26.08.2004, 19:41
loadedVars = new LoadVars();
loadedVars.onData = function (src) {
trace("Variables received: " + src);
if (src = = undefined) {
this.onLoad(false);
} else {
this.decode(src);
this.loaded = true;
this.onLoad(true);
}
};

loadedVars.onLoad = function (success) {
trace("Vars load successfully? " + success);
}

loadedVars.load("http://www.thesite.com/cgi-bin/getData.pl");

vuz[0] = loadedVars.a;
acts[0] = loadedVars.b;

Almik
26.08.2004, 21:03
наверное я делаю что-то не так. но теперь с твоим примером я вообще перестал получать переменные. может дело в том, что с помощью

loadedVars.load("http://localhost/myprog/shut.php?
id=1&flag=team&base=0");

я пытаюсь одновременно послать переменные ?

с loadVariablesNum у меня получалось одновременная передача и прием данных. вот только , опять же, в массив их не засунуть.

но за пример спасибо.

fiot
26.08.2004, 21:14
может ты расскажешь что ты имненно хочешь сделать и зачем это тебе нужно. ок ?

Almik
26.08.2004, 22:08
Так вроде как и объяснил. Просто кое-что не досказал, не посчитал это важным, но в крации нужно след.:

Файл shut.php, в зависимости от значения переменных полученных от shut.swf посылает обратно в shut.swf 2е переменные “a”и ”b” с определенным текстом. Так вот значение этих переменных нужно запихать в массивы “nuz” и “acts” соответственно.

Почему в массивы ? а не в обычные переменные ? потому что запросов N_ое кол-во (в примере ниже - 5) и значение переменных “a” и “b” все время меняется, но их значения нужно обязательно сохранить для дальнейшего пользования. (потом будут выводиться в динамическом поле).

Я сделал это примерно так.
-------------------------------------------------
for(q = 1; q<=5;q++)
{
loadVariablesNum("http://localhost/myprog/shut.php?id="+q+"&flag=team&base=0", _self);

_root.onData = function() {
vuz[q]=a;
acts[q]=b;
}
}
-------------------------------------------------
shut.php, в зависемости от значения полученной переменной id генерирует строку:
echo("&a=blabla&b=kuku");

проблема, повторюсь, в том, что массивы не заполняются, в то время как если поставть вместо массивов обычные переменные и им передать значения a и b все получается. но мне то нужны массивы данных а не пара переменных.

PS спасибо fiot за проявленный интересн ! надеюсь объяснишь дураку, где я ошибся.

fiot
26.08.2004, 22:21
есть RTFM (http://www.openvue.net/flashbooks.php) советую почитать ...

есть ещё один пример ...

varSender = new LoadVars();
varReceiver = new LoadVars();
varSender.name = "Bruce";
varSender.age = "13";
varReceiver.onLoad = function () {
for (p in this) {
if (typeof this[p] = = "string") {
trace("The variable " + p + " has the value " + this[p]);
}
}
}
trace("Sending " + varSender.toString());
varSender.sendAndLoad("http://www.yourserver.com/cgi-bin/lookup.pl", varReceiver, "GET");

echo("&a=blabla&b=kuku");
а разве & перед a нужен ?

Almik
27.08.2004, 14:09
нечиге не выходит.переменные не грузит.
ладно. буду РТФМ качать.
в любом случаи спасибо.



-----------
а разве & перед a нужен ?
-------------

в моем случаи да. до этого echo() есть еще килограм кода, и флэш, без & путается .

Almik
27.08.2004, 15:39
Вот, благодаря твоему примеру, научился пользоваться loadvars, За что тебе большое спасибо !!!!.
Но главная проблема осталась.Т.е. и теперь полученные переменные с легкостью передаются другим переменным, но вот как только я их помещаю в массивы, массивы опять пусты.
---------------------------------
vuz =new Array();
acts=new Array();

Load = new LoadVars();
Send = new LoadVars();

Send.id = "1";
Send.flag = "team";
Send.base = "0";

Send.sendAndLoad("http://localhost/myprog/shut.php", Send, "GET");
Send.onLoad = initVars;
function initVars() {
vuz[0] = Send.a;
acts [0]= Send.b;
}

---------------------------------------------
дальше пытаюсь вывести значения массива , путем создания динамического поля с вар vuz и вар acts. поля пусты. :(

в то время как переделав этиже массивы в обычные переменные, и передать им соответствующие значения все работает.

KidsKilla
27.08.2004, 15:57
ээээ... ты создаешь массивы, потом переменные с тем же именем и удивляешься, что не отображается?

каким образом массив должен отобразиться в динамо-поле?
поставь вместо поля trace и будет те щастье.

Almik
27.08.2004, 19:25
странно. мне всегда какалось, если объявлен массив с именем
some Array(); то где бы я не написал some , это слово всегда будет ассоциироваться с массивом.

а как же тогда быть ? как заполнить массив ?

CrazY WorM
28.08.2004, 00:04
Может так >>>
vuz =new Array();
acts=new Array();

Load = new LoadVars();
Send = new LoadVars();

Send.id = "1";
Send.flag = "team";
Send.base = "0";

Send.sendAndLoad("http://localhost/myprog/shut.php", Send, "GET");
Send.onLoad = initVars;
function initVars() {
vuz.push(Send.a);
acts.push(Send.b);
}

Almik
28.08.2004, 00:16
не вышло.
он только длинну вернул.

KidsKilla
28.08.2004, 14:07
если уж тебе упёрлось проверять переменную через текстовое поле поставь как переменную не vuz а vuz[0]...

да, кстати ты юзаешь синтаксис as1 а там нет жестко привязанного типа переменных - ты можешь написать

var someVar = new Array();
someVar = "some text";

и в someVar будет строка, а не массив...

Almik
28.08.2004, 16:59
да, думаю ты прав дело в особенности as1. пойду покупать последнию верси.

спасибо.

KidsKilla
28.08.2004, 17:10
зачем те as2? по мне так as1 удобнее. просто чуть сложнее отслеживать изменения переменной.
кароч, у тя все по ходу пашет нормально, просто проверяешь коряво))

Almik
28.08.2004, 19:29
а как же проверять тогда ? я создал динамические поля с названиями массивов. затем , с помощью цикла заполняю массив:

----------------------------------------------------------------
vuz =new Array();
acts=new Array();


for (k=1; k<=5; k++) // т.е. в данном примере я заполняю 5 элементов
{
Load = new LoadVars();
Send = new LoadVars();

Send.id = k; // переменную которую необходимо менять
Send.flag = "team";
Send.base = "0";

Send.sendAndLoad("http://localhost/myprog/shut.php", Send, "GET");
Send.onLoad = initVars;
function initVars()
{
vuz[k] = Send.a; // заполняю 1ый массив
acts [k]= Send.b;// заполняю 2ой массив
}
}
-------------------------------------------------------------------
в итоге массив пуст. точнее поля с названиями этих массивов.
но вот что интересно, если я объявлю эти массивы не в начале, как сделал, а в конце:



function initVars()
{

vuz =new Array();
vuz[k] = Send.a; // заполняю 1ый массив
acts=new Array();
acts [k]= Send.b;// заполняю 2ой массив
}
то массив заполнится , но, как можно догадаться , только на 1 элемент. и это понятно, т.к. находясь в цикле, массивы с каждым разом объявляются заного.

Итогю: как я понимаю дело в облости жизни массива. т.к. в 1 случаи я объявил массив и заполнил его в разных местах, а во 2ом внутри одной функции.

есть мысли ?

KidsKilla
29.08.2004, 16:05
var k = 1;
var kmax = 5;
var vuz =new Array();
var acts=new Array();
var Load = new LoadVars(); //зачем это здесь?
var Send = new LoadVars();
Send.flag = "team";
Send.base = "0";

function initVars() {
vuz[k] = this.a;
acts[k]= this.b;
trace("acts["+k+"]="+acts[k]+"; vuz["+k+"]="+vuz[k]+";");
}

for(k; k<kmax; k++)
Send.id = k;
Send.sendAndLoad("http://localhost/myprog/shut.php", Send, "GET");
Send.onLoad = initVars;
}



по-моему так...

сначала определяем функцию, а уж потом циклы и пр...

Almik
29.08.2004, 17:39
ну вот. хотя бы заполнил массив. спасибо тебе большое.
только вот не понятно почему везде индекс 6.
(единственное что я изменил в твоем коде, это не k<kmax ,а k<=kmax т.к. мне нужно захватить и посл. элемент)

Output:
-------------------------------
acts[6]=kira; vuz[6]=SPBGUI;
acts[6]=misha; vuz[6]=good;
acts[6]=lesha; vuz[6]=well;
acts[6]=sasha; vuz[6]=nowell;
acts[6]=anton; vuz[6]=very;
-------------------------------


ну и собственно динамо поле не заполнилось все равно.
у меня 2а поля :
1ое InstanceName - нету var vuz;
2ое InstanceName - нету var acts;

ps а var load действительно ненужен. я его забыл удалить. раньше использоваk .load сейчас .sendandload. извините.

KidsKilla
29.08.2004, 18:27
хмм...
ты точно не переопределяешь k в скрипте?
если нет - проставь в некоторых местах trace, мож выяснишь.
а я всё-равно больше не смогу помочь, не видя целого файла...

по-поводу полей - я ступил:

var k = 1;
var kmax = 5;
vuz =new Array();
acts=new Array();
var Send = new LoadVars();
Send.flag = "team";
Send.base = "0";

function initVars() {
vuz[k] = this.a;
acts[k] = this.b;
trace("acts["+k+"]="+acts[k]+"; vuz["+k+"]="+vuz[k]+";");
}

for(k; k<=kmax; k++)
Send.id = k;
Send.sendAndLoad("http://localhost/myprog/shut.php", Send, "GET");
Send.onLoad = initVars;
}

Almik
29.08.2004, 22:24
и на этом спасибо. буду рыть дальше.

dimarik
30.08.2004, 16:23
Оригинал написал KidsKilla
если уж тебе упёрлось проверять переменную через текстовое поле поставь как переменную не vuz а vuz[0]...

да, кстати ты юзаешь синтаксис as1 а там нет жестко привязанного типа переменных - ты можешь написать

var someVar = new Array();
someVar = "some text";

и в someVar будет строка, а не массив...

И сторока и массив будут жить с одним именем. Тёзки так сказать. Просто флэшка смотрит в контексте употребления имени. Если просто someVar = "some text" - то стринг, а ежели someVar[0] = "some text", то 0-й элемент массива. И живут они вместе замечательно, душа в душу.

Almik
30.08.2004, 19:10
мужики. последнии байты кода, помогите !!!

shut.php на выходе дает
echo("&a=sasa,misa,lesa,anton,gena&b=well,nowell,good,very,popa");
-------------------------------------
Send = new LoadVars();
Send.flag = "team";
Send.sendAndLoad("http://localhost/myprog/shut.php", Send, "GET");
Send.onLoad = function(success) {
if (success)
{
trace("Send.a="+Send.a+" Send.b="+Send.b); //все выдает
vuz = Send.a.split(",");//заполняю массив vuz
base = Send.b.split(",");//заполняю массив base
trace("vuz="+vuz+" base="+base);//выдает норм. массив

}
}
trace("vuz ="+vuz+" base="+base);// нихера не выдает.
--------------------------------------------------

так вот как эти массивы (vuz и base) заполучить вне тела функции (success). кароче как их передать другим переменным и дальше использовать.

Almik
30.08.2004, 22:59
Проблема решена.
понадобилось 5 дней и 4 вечера чтобы понять, что данные не грузятся моментально и что могут не успевать догружаться до собыия которое их использует.

Еще раз спасибо большое.