Dziwne NIEdziałanie 'variable()' POMOCY |
Autor |
Wiadomość |
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Wto 10 Kwi, 2012 22:54 Dziwne NIEdziałanie 'variable()' POMOCY
|
|
|
Dlaczego sekwencja "variable(nazwa)=...'
działa na poziomie ROOT, a już z poziomu funkcji - nie.
Kod: |
onSelfEvent (load)
{var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1'; // działa
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2'; // działa
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);
Funkcja();
}
function Funkcja()
{var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1'; // działa
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2'; // NIE działa
trace('');
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
}
|
Skutkiem tego nie można wysłać zmiennych
output.send("send.php", "_blank", "POST");
W poprzednich wersjach Swish'a to DZIAŁAŁO, ale ...
no właśnie.
|
Ostatnio zmieniony przez Johanson Sro 11 Kwi, 2012 05:40, w całości zmieniany 3 razy |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Sro 11 Kwi, 2012 00:27
|
|
|
Kod: |
onSelfEvent (load) {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1';
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2';
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);
Funkcja();
}
function Funkcja() {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1';
output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2';
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
} |
|
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Sro 11 Kwi, 2012 05:26
|
|
|
no i ? |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Sro 11 Kwi, 2012 09:23
|
|
|
no i działa jakbyś nie zauważył. Zamiast zmiennej 2 wyświetlało undefined, teraz się wyświetla normalnie: Fun 2:To jest Znienna nr 2.
Coś jeszcze? |
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Sro 11 Kwi, 2012 12:25
|
|
|
Dla niezorientowanych wyjaśniam:
Sekwencja 'variable(..)' służy (akurat w SwishMax4 przestała działać)
do ustalania wartości zmiennej o nazwie, której JESZCZE NIE ZNAMY
podczas pisania programu.
Dlatego nie interesuje mnie jawne podstawienie
(patrz globalny zasięg zmiennej 'nazwa')
Kod: | output.Zmienna_2=nazwa; |
tylko konstrukcja
Kod: | variable(nazwa)='To jest zmienna nr 2'; |
które NIE działa.
Do tej pory w SwishMax3 można było użyć:
Kod: | output.eval (nazwa)='cokolwiek' |
|
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Sro 11 Kwi, 2012 15:14
|
|
|
Johanson napisał/a: |
tylko konstrukcja
Kod: | variable(nazwa)='To jest zmienna nr 2'; |
które NIE działa.
|
Udowodniłem wyżej, że działa.
Ale skoro masz żal do wszystkich, że nie działa tak jak ty chcesz, to twoja sprawa.
Jak nie pasuje SM4 to proponuję przejść na SM3.
Dodam tylko, że w SM3 twój kod też nie działa, więc nie opowiadaj bzdur. |
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Sro 11 Kwi, 2012 21:37
|
|
|
A mógłbym grzecznie poprosić o ten 'dowód' ?
Nie mam ochoty na kłótnie, po prostu zależy mi na tym, żeby działało.
Z mojej strony należy się wyjaśnienie:
---------------------------------------------
W wersji '3' (20091130) działała poniższa sekwencja:
Kod: | 574 licznik++;
575 zmienna='ED_b'+licznik;
576 output.eval (zmienna+'n' )=variable('b'+i+'n'); |
Powyższy kod jest wyjęty wprost z DZIAŁAJĄCEGO programu,
który przekazuje do PHP metodą POST
za każdym razem inne zmienne, o różnych wartościach.
Nie mogę przewidzieć podczas pisania programu
jaka będzie nazwa zmiennej, więc muszę to robić dynamicznie.
Po wgraniu wersji '4' (20110318 , 20110620 , 20110919) pojawił się błąd:
Cytat: | Oczekiwano zapisywalna zmienna ale znalezion "output.eval (zmienna+'n' )" przed "=" w skrypcie:
Scena_::function sendOrder(h:Number, w:Number)
Scena_, linia 576: output.eval (zmienna+'n' )=variable('b'+i+'n'); // nazwa |
Dlatego zacząłem kombinować, aby zaczęło działać przykładowo:
Kod: | output.eval (zmienna)='cokolwiek';
lub
variable('output.+nazwa)='cokolwiek';
|
Żaden z nich nie działa (fakt, że skopiowałem do netu tylko drugą wersję
i twierdziłem, że ona działała w wersji '3' - za co przepraszam).
Prawidłowo chodziła pierwsza wersja (ta z VAL), co sytuacji nie zmienia.
Jeśli "Espe1" twierdzi, że
Kod: | variable(nazwa)='To jest zmienna nr 2'; |
działa, to niech zakomentarzuje wcześniejszą linię kodu, tzn.
Kod: | // output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2'; |
i ... sprawdzi efekt - NIE DZIAŁA.
Pytanie ostateczne:
Może istnieje jednak metoda wysyłania zmiennych do PHP
z wykorzystaniem makrorozwinięcia (jak zwał, tak zwał);
w każdym razie nie w postaci jawnej. |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Sro 11 Kwi, 2012 23:43
|
|
|
Twoja wersja:
Kod: |
onSelfEvent (load)
{var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1'; // działa
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2'; // działa
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);
Funkcja();
}
function Funkcja()
{var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1'; // działa
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2'; // NIE działa
trace('');
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
}
/*
debug:
_root 1: To jest zmienna nr 1
_root 2: To jest zmienna nr 2
Fun 1: To jest zmienna nr 1
Fun 2: undefined <== nie działa, wywala undefined
*/ |
Moja wersja:
Kod: |
onSelfEvent (load) {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1'; // działa
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2'; // działa
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);
Funkcja();
}
function Funkcja(){
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1'; // działa
output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2'; // działa
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
}
/*
debug:
_root 1: To jest zmienna nr 1
_root 2: To jest zmienna nr 2
Fun 1: To jest zmienna nr 1
Fun 2: To jest zmienna nr 2 <== działa
*/ |
co do wysyłania zmiennych do php:
Kod: |
output.sendAndLoad("plik.php", output, "POST"); |
Wstawiłeś kod z bykiem i pytasz dlaczego nie działa, poprawiłem kod, a ty dalej swoje.
Jeszcze wprowadzasz ludzi w błąd, że w swish 3 działało. Sprawdziłem, też wywala undefined. Masz więc do wyboru: mój kod, albo "niedziałanie". |
Ostatnio zmieniony przez espe1 Sro 11 Kwi, 2012 23:58, w całości zmieniany 1 raz |
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Sro 11 Kwi, 2012 23:54
|
|
|
Czy mógłybyś zakomentarzować linię, o której mówiłem i zobaczyć efekt?
Proszę czytać ze zrozumieniem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Czw 12 Kwi, 2012 00:03
|
|
|
Johanson napisał/a: | Czy mógłybyś zakomentarzować linię, o której mówiłem i zobaczyć efekt?
Proszę czytać ze zrozumieniem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
a niby dlaczego chcesz wywalić to co poprawiłem??? Przecież po to poprawiłem żeby działo.
Człowieku, skąd ty się urwałeś?
Najlepiej zakomentarzuj sobie całość |
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Czw 12 Kwi, 2012 00:13
|
|
|
Ok
Urwałem sie ?
W taki razie: nie komentarzuj.
Sprawdź poniższe:
Kod: |
onSelfEvent (load) {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1 w ROOT';
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2 w ROOT';
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);
Funkcja();
}
function Funkcja(){
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1 w FUN';
output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2 w FUN';
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
}
|
Dla jasności:
Do Twojej wersji kodu dodałem tylko 'w ROOT', oraz 'w FUN',
co ma unaocznić Twoje niezrozumienie!!
To, że w funkcji jes widoczna 'Zmienna_2' wynika
z wcześniejszego JAWNEGO podstawienia zmiennej w ROOT.
Kwestia zasięgu!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Czw 12 Kwi, 2012 00:23
|
|
|
No i wyświetla prawidłowo w debug (trace):
Kod: |
_root 1: To jest zmienna nr 1 w ROOT
_root 2: To jest zmienna nr 2 w ROOT
Fun 1: To jest zmienna nr 1 w FUN
Fun 2: To jest zmienna nr 2 w FUN
|
|
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Czw 12 Kwi, 2012 00:48
|
|
|
Coś mi się wydaje, że moje (a być może i Twoje) nerwy
niepotrzebnie są szarpane przez producenta SwishMax'a.
Otóż sprawa powoli zaczyna się wyjaśniać:
W poziomie ROOT można dowolnie wykorzystywać 'variable(..)',
zaś na poziomie funkcji trzeba NAJPIERW daną (konkretną) zmienną ZAINICJOWAĆ
w postaci jawnej.
Wystarczy sprawdzić:
Kod: |
function Funkcja(){
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1 w FUN';
output.Zmienna_2='dupa'; // <---------------------------------------
variable(nazwa)='To jest zmienna nr 2 w FUN';
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
} |
lub
Kod: |
function Funkcja(){
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1 w FUN';
output.Zmienna_2=''; // < ------------------------------------------
variable(nazwa)='To jest zmienna nr 2 w FUN';
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
} |
Tyle, że ... co mi z tego, że muszę jawnie podstawiać,
skoro mi właśnie zależy na uniwersalności.
Ostatecznie chodzi o stworzenie funkcji:
Wyslij(zmiennaNazwa,zmiennaWartosc),
która przecież nie może wiedzieć w momencie jej tworzenia
jaka będzie nazwa zmiennej, więc nie może jej zainicjować. |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Czw 12 Kwi, 2012 11:16
|
|
|
OK
Poddaje się.
Nic nie poradzę na Twoje niezrozumienie tematu. |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
Wysłany: Czw 12 Kwi, 2012 12:28
|
|
|
opisz dokładnie co chcesz wysłać, wrzuć plik swi i php, bo coś mi się wydaje, że do niczego ci to nie jest potrzebne |
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Pią 13 Kwi, 2012 17:37
|
|
|
Chcę, żeby z programu SwishMax były przesyłane zmienne z ich wartościami
do PHP via POST:
Swish
Kod: | . . .
Wyslij('parametrA','czerwony');
. . .
Wyslij('upust',25);
. . .
Wyslij('Nazwisko','Abacki');
. . .
Wyslij('cecha_623','BGP-34/34');
. . . |
a w PHP można było wydrukować
Kod: | . . .
print_r(POST);
. . . |
Podreślam:
NIE JESTEM W STANIE PODAĆ ANI ILOŚCI ZMIENNYCH,
ANI ICH NAZW !
Do czego to jest potrzebne?
Bez komentarza |
Ostatnio zmieniony przez Johanson Pią 13 Kwi, 2012 17:42, w całości zmieniany 1 raz |
|
|
|
|
espe1
Profesjonalista
Pomógł: 16 razy Dołączył: 02 Lis 2011 Posty: 175 Skąd: łódzkie
|
|
|
|
|
Johanson
Przyjaciel
Dołączył: 05 Lut 2009 Posty: 56 Skąd: Grudziądz
|
Wysłany: Pią 13 Kwi, 2012 17:44
|
|
|
Proponujesz w pierwszym wariancie wysyłkę 'myVars',
w którym są konkretne zmienne: 'Name', 'Email', 'Message',
zaś wariant drugi wysyła wszystko z ROOT'a.
Otóż przyjmij do wiadomości, że program obsługujący zamówienia
działa od przeszło dwu lat (moduł główny w wersji '3')
i radzi sobie zupełnie nieźle na gruncie SWISH-PHP-mySQL
Do tej pory to działa
Tyle, że w wersji '3'
Przyszła wersja '4' i zmieniła się obsługa
funkcji 'E V A L' oraz 'V A R I A B L E',
której to zmiany nie przyjmujesz do wiadomości. |
|
|
|
|
|