Joanna I.

Joanna I. graficzka

Temat: [AS3] return i NetConnection

Napisałam klasę która pobiera dane z bazy msql. Zależy mi na tym aby zwracała tablicę z pobranymi z bazy rekordami. Jak to zrobić? Poniżej mój kod:


package {

import flash.net.*;

public class GetData {

public function getData(nazwaNaglowka:String, nazwaTabeli:String):void {

var gw:NetConnection;
var res:Responder;

gw = new NetConnection();
gw.connect("tutaj jest adres do gateway.php");
res = new Responder(onResult, ErrorHandler.onDBError);

gw.call("nazwaKlasy.returnData", res, nazwaNaglowka, nazwaTabeli);

}

public function onResult(responds:Object):Array {
var t:Array = responds.serverInfo.initialData;
var a:Array = new Array();
for (var i:uint = 0; i<t.length; i++){
a.push(t[i][0]);
}
}


}
}



Chciałabym móc w innej klasie zrobić następujące wywołanie:


trace(GetData.getData("tu podaję nagłówek", "tu podaję tabelę"));


żeby powyższe zaskutkowało wypisaniem tablicy interesujących mnie nagłówków.

konto usunięte

Temat: [AS3] return i NetConnection

Hej, możesz zrobić tak ale lepiej mieć w PHP w usłudze zwracane rekordy jako array ( mysql_fetch_array )

[1]
ale jak już używasz serverInfo to Twoja metoda :

var object:Object = new Object();
for (var i:Number = 0 ; i < responds.serverInfo.columnNames.length ; i++) {
object[responds.serverInfo.columnNames[i]] = String(responds.serverInfo.initialData).split(",")[i];
resultArray.push(object);
}


i później wywołujesz np : resultArray[0].login - nie wiem co masz zwracane dlatego wole rozwiązanie o którym Ci pisałem na początku

[2]
dokładnie tak wywołujesz tylko GetData musi mieć jakaś instancje


var getData:GetData = new GetData();
getData.getData("tu podaję nagłówek", "tu podaję tabelę"));


EDIT - bibikodeSylwester Gąsiewski edytował(a) ten post dnia 30.12.09 o godzinie 06:34
Joanna I.

Joanna I. graficzka

Temat: [AS3] return i NetConnection

Dzięki za odpowiedź, ale poruszyłeś mój problem z innej strony niż chciałam :) Uproszczę zatem.

package {
public class GetData {
public function getData(mójParametr):void {
ta funkcja wywołuje usługę PHP
z parametrem mójParametr i jak się uda,
to wywołuje funkcję onResult
}
public function onResult(responds:Object):Array{

ta funkcja powinna mi zwracać tablicę którą zwraca usługa PHP

return mojaTablica;
}


}
}


No i ideałem byłoby gdybym w innej klasie pisząc:

GetData.getData(mójParametr)

otrzymała to co zwraca onResult.

A swoją drogą to jasne że lepiej jak w usłudze PHP będą zwracane rekordy jako tablica, i tak zamierzałam to poprawić :)

EDIT: literówkiJoanna I. edytował(a) ten post dnia 30.12.09 o godzinie 09:42
Marcin W.

Marcin W.
TI/IT/VM/HT/PC/XP/AD
/SE/XL/XE/AS/TB/CP/J
S/JV

Temat: [AS3] return i NetConnection

Twój problem rozwiąże singleton :-)

konto usunięte

Temat: [AS3] return i NetConnection

MAW napisal, staticSylwester Gąsiewski edytował(a) ten post dnia 30.12.09 o godzinie 10:33
Paweł Pason

Paweł Pason FlashDab/Szczecin

Temat: [AS3] return i NetConnection

Chyba chodzi o:


this.dispatchEvent(new MyEvent(MyEvent.ALL_DATA_LOADED, {myArray:arrayReturnedFromPHP}));


I w dowolnym miejscu łapiąc event masz arraya w event.params.myArray

Pamiętać tylko o podpięciu listenera do klasy GetData.

PozdrawiamPaweł Pason edytował(a) ten post dnia 30.12.09 o godzinie 13:36

konto usunięte

Temat: [AS3] return i NetConnection


Chciałabym móc w innej klasie zrobić następujące wywołanie:


trace(GetData.getData("tu podaję nagłówek", "tu podaję tabelę"));


żeby powyższe zaskutkowało wypisaniem tablicy interesujących mnie nagłówków.

nie da sie tego zrobić, ponieważ

gw.call

jest asynchroniczne. Pomoże singleton i eventy, jak już wyżej napisano.

Temat: [AS3] return i NetConnection

Paweł Pason:

this.dispatchEvent(new MyEvent(MyEvent.ALL_DATA_LOADED, {myArray:arrayReturnedFromPHP}));
nieładnie tak umieszczać parametry (pola z danymi) w Evencie. Referencje utworzone w nim pozostają w pamięci i mogą zostać pominięte przez garbage collector.
lepiej stworzyć klasę - model danych, który nasłuchiwał będzie odpowiedzi serwera, w razie gdy odpowiedź dostanie zapisze dane w swojej zmiennej, wypluje eventa, który będzie nasłuchiwany przez klasę docelową, a ta odczyta z modelu potrzebne informacje z przechowywanej w nim zmiennej.
Paweł Pason

Paweł Pason FlashDab/Szczecin

Temat: [AS3] return i NetConnection

Oj Panie Krzysztofie, proponuję przeprowadzić test na dobry początek.
W Evencie nie przekazałem nowego obiektu, tylko wskaźnik do Arraya.
Przykład.

private function onMapLoaded(event : LoaderEvent) : void
{
trace("MapManager.onMapLoaded()" + event.params.arr[0]);// shows some data
MapLoader(ml).myArray[0] = 2;
trace("MapManager.onMapLoaded(2)" + MapLoader(ml).myArray[0]);// shows 2
trace("MapManager.onMapLoaded(3)" + event.params.arr[0]);// shows 2
}


Ostatnie dwie linie wytraceują 2. Dlaczego ? Właśnie dlatego, że przekazałem wskaźnik, a nie tworzyłem nowego obiektu.

Praktycznie w każdym evencie są przekazywane parametry, więc naprawdę nie widzę powodów, aby tego nie robić. Pilnować porządku i samemu sprzątać po sobie.

PozdrawiamPaweł Pason edytował(a) ten post dnia 02.01.10 o godzinie 14:32



Wyślij zaproszenie do