Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [rozwiązane][advAjax] x2, czyli 2 obiekty ajax na jednej stronie
son
post 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
Go to the top of the page
+Quote Post
TomASS
post 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?


--------------------
Go to the top of the page
+Quote Post
ARJ
post 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
Go to the top of the page
+Quote Post
mariuszn3
post 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.
Go to the top of the page
+Quote Post
son
post 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 worriedsmiley.gif

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
Go to the top of the page
+Quote Post
060156
post 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%)
-----


Java Script debugger pokazuje, ze

  1. function parseRecords(xml) {
  2. d2 = $("katalogKartek");
  3. d2.innerHTML = "";         <-  tutaj jest blad
  4. ......


Czyli zmienna d2 jest nieustawiona wlasciwie ...

Moze Ci to pomoze .
Go to the top of the page
+Quote Post
mariuszn3
post 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
Go to the top of the page
+Quote Post
Tajny
post 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. "
Go to the top of the page
+Quote Post
ARJ
post 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
Go to the top of the page
+Quote Post
mariuszn3
post 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
Go to the top of the page
+Quote Post
ARJ
post 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
Go to the top of the page
+Quote Post
son
post 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ć smile.gif


--------------------
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
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: 28.04.2024 - 05:01