Olga Grabek

Olga Grabek Senior Software
Engineer

Temat: PHP po stronie serwera i odświeżanie danych w...

Mam pytanie odnośnie tego w jaki sposób "zmusić" AdvancedDataGrid do odczytania na nowo danych z XML-a?

W aplikacji mam AdvancedDataGrid. Jej dataProvider otrzymuje dane w ten sposób:

<mx:HTTPService id="getLanguagesData"
url="http://localhost/easylearning/php/language/language.php"
resultFormat="e4x"/>
<mx:XMLListCollection id="resultLanguagesData"
source="{getLanguagesData.lastResult.language}"/>

Dane aktualizuje za pomocą formularza otwieranego na warstwie - komponent implementuje mx:TitleWindow. Chciałabym by w momencie, gdy aktualizacja/dodanie/usuwanie danych się powiedzie zostało to odzwierciedlone w AdvancedDataGrid.

Próbowałam wysyłać zdarzenie z mx:TitleWindow, ale coś robię źle, bo w mx:Application nie widać tego zdarzenia.

Na razie doszłam tylko do rozwiązania że w mx:TitleWindow, jeżeli zapis powiedzie się to wywołuje:

parentApplication.getLanguagesData.send();

ale rozwiązanie działa tylko pod FF (pod IE8 ani drgnie), a poza tym jest nieeleganckie. Jak to prawidło rozwiązać?Olga Grabek edytował(a) ten post dnia 22.03.10 o godzinie 20:54

konto usunięte

Temat: PHP po stronie serwera i odświeżanie danych w...

Olga Grabek:
Mam pytanie odnośnie tego w jaki sposób "zmusić" AdvancedDataGrid do odczytania na nowo danych z XML-a?

W aplikacji mam AdvancedDataGrid. Jej dataProvider otrzymuje dane w ten sposób:

<mx:HTTPService id="getLanguagesData"
> url="http://localhost/easylearning/php/language/language.php"
resultFormat="e4x"/>
<mx:XMLListCollection id="resultLanguagesData"
> source="{getLanguagesData.lastResult.language}"/>

Dane aktualizuje za pomocą formularza otwieranego na warstwie - komponent implementuje mx:TitleWindow. Chciałabym by w momencie, gdy aktualizacja/dodanie/usuwanie danych się powiedzie zostało to odzwierciedlone w AdvancedDataGrid.

Próbowałam wysyłać zdarzenie z mx:TitleWindow, ale coś robię źle, bo w mx:Application nie widać tego zdarzenia.

Na razie doszłam tylko do rozwiązania że w mx:TitleWindow, jeżeli zapis powiedzie się to wywołuje:

parentApplication.getLanguagesData.send();

ale rozwiązanie działa tylko pod FF (pod IE8 ani drgnie), a poza tym jest nieeleganckie. Jak to prawidło rozwiązać?Olga Grabek edytował(a) ten post dnia 22.03.10 o godzinie 20:54

Ostatnio uczę Flexa z książki http://www.manning.com/armstrong/
Jest tam opisany dokładnie taki przypadek użycia jaki potrzebujesz - odświeżenie grida zapisaniu danych po stronie serwera.
Jeśli nie masz czasu na wertowanie ciężkich stronic, to po prostu przejrzyj źródła aplikacji http://www.manning-source.com/books/armstrong/Flexible...
Generalnie gorąco polecam tę pozycję ;)
Olga Grabek

Olga Grabek Senior Software
Engineer

Temat: PHP po stronie serwera i odświeżanie danych w...

Dzięki za odpowiedź. A możesz jeszcze napisać, gdzie dokładniej tego szukać w tej książce? Przewertuje ją całą, ale na razie chciałabym jak najszybciej się dowiedzieć jak rozwiązać ten problem.

konto usunięte

Temat: PHP po stronie serwera i odświeżanie danych w...

Olga Grabek:
Dzięki za odpowiedź. A możesz jeszcze napisać, gdzie dokładniej tego szukać w tej książce? Przewertuje ją całą, ale na razie chciałabym jak najszybciej się dowiedzieć jak rozwiązać ten problem.

Ctrl+F, wpisujesz DataGrid i szukasz w pdfie lub w kodzie..
Olga Grabek

Olga Grabek Senior Software
Engineer

Temat: PHP po stronie serwera i odświeżanie danych w...

Powiem szczerze, że temat mnie zaskakuje. Zrobiłam sobie naprawdę proste wysłanie formularza:


<mx:HTTPService id="updateLanguages"
url="http://localhost/easylearning/php/language/save_data.php"
method="POST"
result="updateLanguagesResponse(event)">
<mx:request xmlns="">
...parametry </mx:request>
</mx:HTTPService>


a potem w akcji updateLanguagesResponse(event)
ponownie wysyłam żądanie do serwera o pobranie danych XML.


private function updateLanguagesResponse(event:ResultEvent):void{
getLanguages.send(); //żądanie o pobranie danych
languages.refresh(); //odświeżenie mojego dataProvider w DataGrid
}


Wszystko jest w jednym pliku, nic już nie oddzielam. Pod każdą normalną przeglądarką to działa, dane się odświeżają, a pod IE8 nie. Myślałam, że duży plus Flexa polega m.in. na tym, że nie trzeba pisać specjalnych hacków pod przeglądarki. Może na jakieś lokalne ustawienia IE powodują taką sytuację? Oczywiście po zamknięciu i ponownym otwarciu przeglądarki jest ok, ale to pewnie dlatego, że na creationComplete ma pobranie danych do DataGrid. Nie rozumiem :(
Olga Grabek

Olga Grabek Senior Software
Engineer

Temat: PHP po stronie serwera i odświeżanie danych w...

Problem jest z cachem w IE8. Wyczyszczenie cach'a powoduje, że pobierane są nowe dane. Ale trzeba to robić za każdym razem. Można to jakoś obejść?

Dodam, że wysyłam żądanie metodą post, pomna na to, co IE cache-uje get-y.

Problem rozwiązany, ale po stronie serwera. Pomogło ustawienie nagłówków:

header(”Cache-Control: no-cache, must-revalidate”);
header(”Expires: Mon, 26 Jul 1997 05:00:00 GMT”);Olga Grabek edytował(a) ten post dnia 25.03.10 o godzinie 21:51
Tomasz Misiewicz

Tomasz Misiewicz Flex Developer

Temat: PHP po stronie serwera i odświeżanie danych w...

Olga Grabek:
Mam pytanie odnośnie tego w jaki sposób "zmusić" AdvancedDataGrid do odczytania na nowo danych z XML-a?

W aplikacji mam AdvancedDataGrid. Jej dataProvider otrzymuje dane w ten sposób:

<mx:HTTPService id="getLanguagesData"
> url="http://localhost/easylearning/php/language/language.php"
resultFormat="e4x"/>
<mx:XMLListCollection id="resultLanguagesData"
> source="{getLanguagesData.lastResult.language}"/>

Dane aktualizuje za pomocą formularza otwieranego na warstwie - komponent implementuje mx:TitleWindow. Chciałabym by w momencie, gdy aktualizacja/dodanie/usuwanie danych się powiedzie zostało to odzwierciedlone w AdvancedDataGrid.

Próbowałam wysyłać zdarzenie z mx:TitleWindow, ale coś robię źle, bo w mx:Application nie widać tego zdarzenia.

Na razie doszłam tylko do rozwiązania że w mx:TitleWindow, jeżeli zapis powiedzie się to wywołuje:

parentApplication.getLanguagesData.send();

ale rozwiązanie działa tylko pod FF (pod IE8 ani drgnie), a poza tym jest nieeleganckie. Jak to prawidło rozwiązać?Olga Grabek edytował(a) ten post dnia 22.03.10 o godzinie 20:54


przesyłaj jakiś dodatkowy, unikalny przy każdym /rikłeście/ parametr. np jakis random + time

Następna dyskusja:

Pobieranie danych z serwera...




Wyślij zaproszenie do