Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQ]/[JS] Zapis tablic do pamięci
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Rewil
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?
fou
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.
Rewil
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ę.
piotr.kazmierczak
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. }
Rewil
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.