Просмотр полной версии : Незаполняется массив
вот код 1 фрейма
--------------------------------------
var vuz= new Array();
var acts= new Array();
loadVariablesNum(".....", _self); //загружаю переменные a и b
_root.onData = function() {
vuz[0] = a;
acts[0] = b;
}
-----------------------------------------
проблема в том, что в итоге массив пуст. переменные грузятся точно, проверял.
если кто-то сможет приветси пример загрузки массива через loadVars буду очень благодарен.
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;
наверное я делаю что-то не так. но теперь с твоим примером я вообще перестал получать переменные. может дело в том, что с помощью
loadedVars.load("http://localhost/myprog/shut.php?
id=1&flag=team&base=0");
я пытаюсь одновременно послать переменные ?
с loadVariablesNum у меня получалось одновременная передача и прием данных. вот только , опять же, в массив их не засунуть.
но за пример спасибо.
может ты расскажешь что ты имненно хочешь сделать и зачем это тебе нужно. ок ?
Так вроде как и объяснил. Просто кое-что не досказал, не посчитал это важным, но в крации нужно след.:
Файл 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 за проявленный интересн ! надеюсь объяснишь дураку, где я ошибся.
есть 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 нужен ?
нечиге не выходит.переменные не грузит.
ладно. буду РТФМ качать.
в любом случаи спасибо.
-----------
а разве & перед a нужен ?
-------------
в моем случаи да. до этого echo() есть еще килограм кода, и флэш, без & путается .
Вот, благодаря твоему примеру, научился пользоваться 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 и будет те щастье.
странно. мне всегда какалось, если объявлен массив с именем
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);
}
не вышло.
он только длинну вернул.
KidsKilla
28.08.2004, 14:07
если уж тебе упёрлось проверять переменную через текстовое поле поставь как переменную не vuz а vuz[0]...
да, кстати ты юзаешь синтаксис as1 а там нет жестко привязанного типа переменных - ты можешь написать
var someVar = new Array();
someVar = "some text";
и в someVar будет строка, а не массив...
да, думаю ты прав дело в особенности as1. пойду покупать последнию верси.
спасибо.
KidsKilla
28.08.2004, 17:10
зачем те as2? по мне так as1 удобнее. просто чуть сложнее отслеживать изменения переменной.
кароч, у тя все по ходу пашет нормально, просто проверяешь коряво))
а как же проверять тогда ? я создал динамические поля с названиями массивов. затем , с помощью цикла заполняю массив:
----------------------------------------------------------------
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;
}
по-моему так...
сначала определяем функцию, а уж потом циклы и пр...
ну вот. хотя бы заполнил массив. спасибо тебе большое.
только вот не понятно почему везде индекс 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;
}
и на этом спасибо. буду рыть дальше.
Оригинал написал KidsKilla
если уж тебе упёрлось проверять переменную через текстовое поле поставь как переменную не vuz а vuz[0]...
да, кстати ты юзаешь синтаксис as1 а там нет жестко привязанного типа переменных - ты можешь написать
var someVar = new Array();
someVar = "some text";
и в someVar будет строка, а не массив...
И сторока и массив будут жить с одним именем. Тёзки так сказать. Просто флэшка смотрит в контексте употребления имени. Если просто someVar = "some text" - то стринг, а ежели someVar[0] = "some text", то 0-й элемент массива. И живут они вместе замечательно, душа в душу.
мужики. последнии байты кода, помогите !!!
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). кароче как их передать другим переменным и дальше использовать.
Проблема решена.
понадобилось 5 дней и 4 вечера чтобы понять, что данные не грузятся моментально и что могут не успевать догружаться до собыия которое их использует.
Еще раз спасибо большое.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.