|
SWiSH Forum Forum użytkowników programów SWiSH |
 |
SWiSH Max - przesyłanie danych metodą sendAndLoad
krzywy105 - Pon 06 Cze, 2011 16:02 Temat postu: przesyłanie danych metodą sendAndLoad Witam mam problem nie wiem jak przesyłać dane metodą sendAndLoad próbuje rożnych sposobów z internetu ale jakoś nie chce działać. Tu na forum znalazłem taki przykład: PRZYKŁAD
Ale też nie wiem jak do tego podejść bo kombinuje i nie działa. Ma ktoś może jakiś najprostszy działający przykład wysłanie i odebrania danych ta metoda z pliku php?
Proszę o jakaś pomoc.
EDIT:
Uzyskałem coś takiego:
plik swi
Kod: | onSelfEvent (load) {
var result_lv:LoadVars = new LoadVars();
var send_lv:LoadVars = new LoadVars();
send_lv.name = "Dane z SWI";
}
onFrame(1){
function pobierz_dane(){
result_lv.onLoad = function(success:Boolean) {
if (success) {
trace(this.dane_z_php);
} else {
trace("Error connecting to server.");
}
};
send_lv.sendAndLoad("http://localhost/~swish/test3.php", result_lv, "POST");
}
pobierz_dane();
}
onFrame(2){
trace ("TEST");
stop();
} |
Niby coś tam przesyła i pobiera z php ale dane te sa tak jakby dostępne tylko wewnątrz funkcji. Dodatkowo wygląda że funkcja jest wykonywana na końcu bo w debugu daje taki wynik:
Kod: | TEST
Dane z PHP.Dane z SWI
|
Treść pliku PHP:
Kod: | <?php
echo '&dane_z_php=Dane z PHP.'.$name ;
?> |
[ Dodano: Pon 06 Cze, 2011 20:12 ]
No jakoś chyba doszedłem do czegoś więc wkleję może się komuś kiedyś przyda.
Zła kolejność wyników wynikała z opuźnienia serwera php a swish nie czeka z skryptem na wynik tylko wykonuje kolejne instrukcje.
Kod: | onSelfEvent (load) {
var result_lv:LoadVars = new LoadVars(); // przygotowanie obiektu odbierającego dane
var send_lv:LoadVars = new LoadVars(); //przygotowanie obiektu wysyłającego dane
send_lv.name = "Dane z SWI23"; //ustawienie pola w obiekcie wysyłającym o nazwie name i wypelnienie jakąś treścia
}
onFrame(1){
send_lv.sendAndLoad("http://localhost/~swish/test3.php", result_lv, "POST"); //wysłanie i odebranie danych z pliku test3.php (wysyła zmienne zdefiniowane w obiekcie send_lv - czyli w pliku php utworzy automatycznie zmienna name)
} //oraz odbiera zmienne zdefiniowane w pliku php tworząc je automatycznie w obiekcie result_lv
onFrame(50){
trace(result_lv.dane_z_php); //tu już tylko wyświetlamy to co pobraliśmy z php
} |
Kod najprostszy ale u mnie działa. Pominąłem funkcje sprawdzające nawiązanie połączenia itp. aby nie zaciemniać
Plik test3.php
Kod: | <?php
echo '&dane_z_php=Dane z PHP2.'.$name ; //definiuje zmienna dane_z_php którą w swishu pobierzemy do obiektu result_lv i dodaje za nia string zmiennej name pobranej z swisha
?> |
Tu też pominąłem definicje metody pobierania zmiennych tylko najprostszy działający kod.
Mam nadzieje że komuś pomoże. Zaznaczam że może tu być błędy bo dopiero się uczę swisha/php ale w każdym razie kod działa.
eden - Wto 07 Cze, 2011 19:26
Ułatw sobie życie i zastosuj funkcje callbackowe do Twojego obiektu. Nie są to żadne opóźnienia PHP. Jest to po prostu operacja asynchroniczna.
Dlatego możemy zdefiniować funkcje dla obiektu, które zostaną odpalone w odpowiedniej chwili automatycznie.
Odpali się wtedy kiedy dane zostaną załadowane poprawnie lub niepoprawnie. (Ty założyłeś, że dane będą gotowe w klatce 50)
Kod: | result_lv.onLoad = function(success){ ... } |
krzywy105 - Sro 08 Cze, 2011 07:36
Właśnie stosowałem taka funkcje:
Kod: | onClick(){
function pobierz_dane(){
result_lv.onLoad = function(success:Boolean) {
if (success) {
wynik = this.wynik;
} else {
trace("Blad polaczenia z serwerem.");
}
};
send_lv.sendAndLoad("http://localhost/~szat3/contact.php", result_lv, "POST");
}
pobierz_dane();
} |
Funkcja pobierająca dane jest na onClick przycisku i dalej następuje przejście do sceny gdzie pobrane dane maja być wyświetlane. Jednak gdy nie odczekam trochę czasu to dane się nie pobierają, swish na nic nie czeka tylko przechodzi do sceny i tam wyświetla "undefined".
Szczerze to nie znam się na tym jeszcze zbyt dobrze więc jak masz jakąś radę lub możesz wytłumaczyć łopatologicznie co zrobić żeby mieć pewność że dane s PHP zostaną odebrane to będe wdzięczny.
eden - Czw 09 Cze, 2011 01:35
Niewiem po co ci nastepna scena, ale skoro juz koniecznie musisz to przejście do niej powinno być także w tej funkcji.
Cytat: | onClick(){
function pobierz_dane(){
result_lv.onLoad = function(success:Boolean) {
if (success) {
wynik = this.wynik;
// TUTAJ POWINNO BYC PRZEJŚCIE
} else {
trace("Blad polaczenia z serwerem.");
}
};
send_lv.sendAndLoad("http://localhost/~szat3/contact.php", result_lv, "POST");
}
pobierz_dane();
} |
|
|