Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQ]/[JS] Zapis tablic do pamięci, Ajax, przed, zamiast po wykonaniu skryptu.
Rewil
post 24.10.2011, 23:01:58
Post #1





Grupa: Zarejestrowani
Postów: 175
Pomógł: 0
Dołączył: 19.09.2009

Ostrzeżenie: (10%)
X----


Pobieram sobie baze XML'em, całą, ładuję ją do tablic, no właśnie, nie rozumiem czemu po za funkcją bazaXML mi nie robi ich globalnych. Zmienne przyrównane do tablic są poprawne, to znaczy są pobierane.
  1. $.ajax({
  2. type: "GET",
  3. url: "baza.xml",
  4. dataType: "xml",
  5. success: bazaXML
  6. });
  7.  
  8. pozycja = new Array();
  9. czas = new Array();
  10. naglowek = new Array();
  11. nazwa_link = new Array();
  12. link = new Array();
  13. grafika_link = new Array();
  14.  
  15. function bazaXML(xml) {
  16. id_xml = 1;
  17. $(xml).find("miniaturka").each(function () {
  18. pozycja[id_xml] = $(this).find("pozycja").text();
  19. czas[id_xml] = $(this).find("czas").text();
  20. naglowek[id_xml] = $(this).find("naglowek").text();
  21. nazwa_link[id_xml] = $(this).find("nazwa_link").text();
  22. link[id_xml] = $(this).find("link").text();
  23. grafika_link[id_xml] = $(this).find("grafika_link").text();
  24. //alert(naglowek[id_xml]);
  25. id_xml++;
  26. });
  27.  
  28. //alert(naglowek[1]); tu działa
  29. }
  30.  
  31. alert(naglowek[1]); // tu już nie
  32.  


Wygląda to tak jakby ajax, musiał się wykonać na końcu. Najpierw wyświetla się "tu już nie", dopiero później "tu działa"

@EDIT potwierdzone przypuszczenie, wrzuciłem alerta do interwała i pierwszy jest pusty, następne już nie. Jak zainicjować ajaxa żeby wykonał się jako pierwszy?

Ten post edytował Rewil 24.10.2011, 23:23:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
fou
post 25.10.2011, 09:46:09
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 16.09.2006
Skąd: internet

Ostrzeżenie: (0%)
-----


Rewil,

W Twoim skrypcie wszystko działa prawidłowo:) Ajax wykonuje się jako pierwszy, jednak dalsze wykonywanie skryptu nie jest przerwane i nie czeka aż ajax się w pełni wykona, wywoła funkcję bazaXML, która przypisze poprawne wartości do zadeklarowanych zmiennych.

Jeśli chcesz, aby dalsze wykonanie skryptu 'poczekało' na ajaxa i dane w tablicach, to możesz ustawić async: false w zapytaniu ajaxowym.

Ogólnie mówiąc: z danych w zmiennych, np naglowek, powinieneś korzystać dopiero wtedy, gdy będziesz miał pewność, że te dane tam już są załadowane przez ajaxa ;]

Napisz dokładniej co chcesz osiągnąć, to spróbuje coś dokładniej podpowiedzieć, bo po tym fragmencie kodu nie wiem co dzieje się dalej z tymi danymi.
Go to the top of the page
+Quote Post
Rewil
post 25.10.2011, 16:24:52
Post #3





Grupa: Zarejestrowani
Postów: 175
Pomógł: 0
Dołączył: 19.09.2009

Ostrzeżenie: (10%)
X----


Robię galerię z animacyjnymi bajerami.
Początkowo miała być czysta bez ajaxa, ale tablice okazały się trochę zbyt archaiczne w js, stąd ten xml.
Jak to działa: Otwiera się strona, ładuje xml'a do tablic, robię operacje na tablicach. Nic specialnego.
Tylko że ajax się ładuje pod koniec wykonania całego kodu (pomimo że jest przed) i pierwsze załadowanie strony, nie ładuje grafik.

Wrzucenie na ślepo async: false, nie działa, czytam teraz specyfikację.
Go to the top of the page
+Quote Post
piotr.kazmiercza...
post 25.10.2011, 16:33:37
Post #4





Grupa: Zarejestrowani
Postów: 47
Pomógł: 10
Dołączył: 1.03.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Działać nie będzie bo ajax dłużej się wykonuje niż parsowanie js. Rozumiem, że chodzi o załadowanie danych z tablicy do DOMa. Więc poprostu odpal funkcje która to robi w function bazaXML, wtedy wszystko będzie ok.

  1. function bazaXML(xml) {
  2. id_xml = 1;
  3. $(xml).find("miniaturka").each(function () {
  4. pozycja[id_xml] = $(this).find("pozycja").text();
  5. czas[id_xml] = $(this).find("czas").text();
  6. naglowek[id_xml] = $(this).find("naglowek").text();
  7. nazwa_link[id_xml] = $(this).find("nazwa_link").text();
  8. link[id_xml] = $(this).find("link").text();
  9. grafika_link[id_xml] = $(this).find("grafika_link").text();
  10. //alert(naglowek[id_xml]);
  11. id_xml++;
  12. });
  13.  
  14. zaladuj_obrazki();
  15. }


--------------------
Facead.pl - Social Media Agency
Fishcode.pl - Blog
Go to the top of the page
+Quote Post
Rewil
post 25.10.2011, 16:40:50
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 0
Dołączył: 19.09.2009

Ostrzeżenie: (10%)
X----


Tak jak mówisz ajax dłużej się wykonuje niż parsowanie js:

Moja odpowiedź na to, to:
  1. $(document).ajaxComplete(function() { });

Pozdrawiam smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:00