[rozwiązane][advAjax] x2, czyli 2 obiekty ajax na jednej stronie |
[rozwiązane][advAjax] x2, czyli 2 obiekty ajax na jednej stronie |
7.05.2006, 16:52:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 210 Pomógł: 0 Dołączył: 31.01.2004 Skąd: Kraków Ostrzeżenie: (0%) |
Witam,
Korzystam z obiektu advAjax i chciałem na jednej stronie dwukrotnie mieć możliwość skorzystania z ajax'a. Niestety przy normalnym wstawieniu 2 skryptów js obługujących dane zdarzenia, jedno z nich nie działa. Oczywiście osobno działają. W konsoli js w firefox dostaję błąd: d2 has no properties. Zupełnie nie wiem jak sobie z tym poradzić. Ten post edytował son 9.05.2006, 17:44:11 -------------------- Warsztat: Apache 1.3.36 | MySQL 4.1.19 | php 5.1.4 | OS Linux SUSE 10.3 x86_64 | Kernel 2.6.22.12-0.1 | Opera 9.5 | Kate
Na warsztacie: Ekartki |
|
|
7.05.2006, 23:14:12
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) |
A nie możesz zrobić dwuch osobnych funkcji?
-------------------- |
|
|
8.05.2006, 10:17:07
Post
#3
|
|
Grupa: Zarejestrowani Postów: 453 Pomógł: 22 Dołączył: 20.09.2004 Skąd: Kraków - NH - Ostrzeżenie: (0%) |
niesprawdzałem czy działa ale powinno:
Kod <script language="javascript" type="text/javascript"> <!-- function zmienZdjecie(plik) { //pierwsza funkcja advAJAX.get({ url : "test2.php?fot=" + plik, onLoading : function(obj) { document.getElementById('zawartosc').innerHTML = "Loading..."; }, onSuccess : function(obj) { document.getElementById('zawartosc').innerHTML = obj.responseText; }, onError : function(obj) { document.getElementById('zawartosc').innerHTML = "Error: " + obj.status; } }) } function zmienKategorie(kat) { //druga funkcja advAJAX.get({ url : "arty.php?kat=" + kat, onLoading : function(obj) { document.getElementById('zawartosc2').innerHTML = "Loading..."; }, onSuccess : function(obj) { document.getElementById('zawartosc2').innerHTML = obj.responseText; }, onError : function(obj) { document.getElementById('zawartosc2').innerHTML = "Error: " + obj.status; } }) } --> </script> i teraz w linkach wystarczy odwoływać się do odpowiedniej funkcji js. -------------------- Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
|
|
|
8.05.2006, 13:49:26
Post
#4
|
|
Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) |
Błąd 'd2 has no properties' oznacza, że w którymś momencie odwołujesz się do obiektu 'd2', który nie został utworzony.
Gdzieś masz błąd w skrypcie.. w kodzie, który podałeś nie ma żadnego odwołania do 'd2' więc wygląda na to, że błąd masz gdzie indziej. |
|
|
8.05.2006, 17:31:13
Post
#5
|
|
Grupa: Zarejestrowani Postów: 210 Pomógł: 0 Dołączył: 31.01.2004 Skąd: Kraków Ostrzeżenie: (0%) |
ARJ: Właśnie tak mam, ale mi to nie działa
Oto strona na której występuje błąd: http://www.e-kartki.org/Ekartki/Katalog/Widoki (oraz pozostałe kategorie) Na w/w stronie w ajaxie napisany jest katalog (wyświetlanie kartek) oraz menu z lewej strony (w przypadku gdy funkcja się nie uruchomi wyświetlane jest menu wygenerowane przez php). Menu takie jakie ja bym chciał mieć (z linkiem 'pokaż tagi') wyświetla się prawidłowo na każdej stronie nie będącej katalogiem (np. strona główna: http://e-kartki.org) P.s. Warto też zwrócić uwagę, że na podstronach, które wykonują jedynie jedno zapytanie do ajaxa, konsola javascript nie wyświetla żadnych błędów, co oznacza, że sam skrypt jest poprawny Ten post edytował son 8.05.2006, 17:35:49 -------------------- Warsztat: Apache 1.3.36 | MySQL 4.1.19 | php 5.1.4 | OS Linux SUSE 10.3 x86_64 | Kernel 2.6.22.12-0.1 | Opera 9.5 | Kate
Na warsztacie: Ekartki |
|
|
8.05.2006, 20:09:18
Post
#6
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 0 Dołączył: 9.03.2006 Skąd: Columbus Georgia Ostrzeżenie: (0%) |
|
|
|
8.05.2006, 20:28:52
Post
#7
|
|
Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) |
Wygląda na to, że wywołujesz zapytanie xmlHttp jeszcze przed załadowaniem się drzewa DOM strony (od razu w nagłówku strony).. advAjax po otrzymaniu odpowiedzi odpala funkcję parseRecords, które odwołuje się do elementu DOM o id 'katalogKartek', który tak naprawdę jeszcze nie został zinitializowany i tu jest błąd.
Jeśli jeszcze nie korzystasz z żadnego script debugera a korzystasz z FF to zainstaluj sobie Venkmana bardzo pomaga takie rzeczy wyłapywać, to w zasadzie obowiązkowe narzędzie jak się pisze javascript. EDIT: Jako, że poprzez xmlHttp nawiązujesz połączenie asynchroniczne, bardzo możliwe, że na innych podstronach, sczytanie drzewa DOM przez przeglądarkę nadąża przed zwrócieniem rezultatu przez xmlHttp. Tu może leżeć przyczyna tej nie jasności - ten sam kod.. a raz zaskakuje, a innym razem nie zaskakuje. Ten post edytował mariuszn3 8.05.2006, 20:40:30 |
|
|
8.05.2006, 21:15:49
Post
#8
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 28.07.2005 Skąd: 64-100 Leszno Ostrzeżenie: (0%) |
Spróbuj gdzieś na stronie wywołać tą funkcję już po załadowaniu się strony ręcznie, do testów ( np. <a onClick="parseRecords(...);">test</a> )
Jeśli zadziała to wypowiedź powyżej się potwierdzi i będziesz musiał to zainicjować później. -------------------- "Who controls the past controls the future. Who controls the present controls the past. "
|
|
|
8.05.2006, 21:19:47
Post
#9
|
|
Grupa: Zarejestrowani Postów: 453 Pomógł: 22 Dołączył: 20.09.2004 Skąd: Kraków - NH - Ostrzeżenie: (0%) |
a co to jest to d2? według mnie tu leży problem. spróbuj tak:
Kod to:
d2 = $("katalogKartek"); d2.innerHTML = ""; zmień na: d2 = document.getElementById('katalogKartek'); d2.innerHTML = ""; -------------------- Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
|
|
|
8.05.2006, 21:30:40
Post
#10
|
|
Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) |
Cytat(ARJ @ 2006-05-08 20:19:47) a co to jest to d2? według mnie tu leży problem. spróbuj tak: Kod to: d2 = $("katalogKartek"); d2.innerHTML = ""; zmień na: d2 = document.getElementById('katalogKartek'); d2.innerHTML = ""; $() jest to funkcja, która zwraca właśnie element o id "katalogKartek".. taki bardzo przydatny skrót... więc Twój kod w efekcie nic nie zmienia. Funkcja $() jest (najprawdopodobniej) pomysłem autora biblioteki prototype. Bardzo polecam jest to kopalnia sprytnych rozwiązań, które usprawniają pisanie skryptów js. Ten post edytował mariuszn3 8.05.2006, 21:32:31 |
|
|
8.05.2006, 21:34:42
Post
#11
|
|
Grupa: Zarejestrowani Postów: 453 Pomógł: 22 Dołączył: 20.09.2004 Skąd: Kraków - NH - Ostrzeżenie: (0%) |
mariuszn3 dzięki za informacje, nieznałem tego. faktycznie mój kod nic nie zmienia w tym wypadku.
-------------------- Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
|
|
|
9.05.2006, 17:43:53
Post
#12
|
|
Grupa: Zarejestrowani Postów: 210 Pomógł: 0 Dołączył: 31.01.2004 Skąd: Kraków Ostrzeżenie: (0%) |
Dzięki wszystkim za pomoc. Przyczyną było to, że nazwy funkcji w obu skryptach były takie same i trzeba było je zmienić
-------------------- Warsztat: Apache 1.3.36 | MySQL 4.1.19 | php 5.1.4 | OS Linux SUSE 10.3 x86_64 | Kernel 2.6.22.12-0.1 | Opera 9.5 | Kate
Na warsztacie: Ekartki |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 05:01 |