Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] kompletny kod - dlaczego nie ładuje danych inicjalnych?
Forum PHP.pl > Forum > Przedszkole
edgar72
Cześć,
Niestety dostaję białej gorączki an tę sprawę. Wcześniej już pisałem. Ktoś mi doradził, ale niestety nie poradziłem sobie. Teraz podaję pełne kody, może ktoś mi podpowie, jak to dziadostwo ustawić, żeby zadziałało.

http://193.218.155.141/~karolklos/test/test.html

Chodzi o to, że:
1) po wejściu na stronę nie dziąła suwak. DLACZEGO? Przecież window.onload() się wykonało...
2) te 6 linków na górze to testowe linki:
sub_01.php,
sub_02.php,
sub_03.php,
sub_04.php,
sub_05.html
to linki zawierające fragment kodu z treścią div do podmiany. Fajnie działa, ale niestety nie działa suwak
3) link ostatni:
ta_sama
powoduje cudowne zjawisko, bliżej niewyjaśnione, powodujące, ze suwak nagle zaczyna działać. Niestety jest to po porstu przeładowanie tej strony.

O CO MI CHODZI?
Chodzi mi o to, aby:
a ) po wejściu na stronę (od razu) działał suwak
b ) po wejściu na inny link i powrocie do strony z suwakiem na skutek kliknięcia w link "sub_05.html" ten suwak również działał.

Oczywiście będę bardzo zobowiązany i wdzięczny za wskazówki i podpowiedzi.
Pozdrawiam
KK.
CuteOne
wywala błąd i dlatego nie działa... zobacz sobie w moją sygnaturę a wszystko stanie się jasne smile.gif
edgar72
Cytat(CuteOne @ 9.10.2011, 20:04:04 ) *
wywala błąd i dlatego nie działa... zobacz sobie w moją sygnaturę a wszystko stanie się jasne smile.gif


Stary, pomyślisz pewnie, że jestem kretynem, ale nie wiem o jakiej sygnaturze piszesz :/

aaa - chodzi zapewne o Twój opis z Operą smile.gif Sekunda, zaraz obadam.

Hej - tak, rzuca błąd. O taki:

[2011-10-09 20:23:11] JavaScript - http://193.218.155.141/~karolklos/test/test.html
Inline script thread
Uncaught exception: TypeError: Cannot convert 'o' to object
Error thrown at line 7, column 1 in jsScroller(o, w, h) in http://193.218.155.141/~karolklos/test/tes.../jsScroller.js:
var list = o.getElementsByTagName("div");
called from line 5, column 16 in nol() in http://193.218.155.141/~karolklos/test/test.html:
scroller = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
called from line 8, column 12 in http://193.218.155.141/~karolklos/test/test.html:
window.onload = nol();

Wg mnie, nie może utworzyć obiektu z powodu niemożności znalezienia DIVu takiego: "Scroller-1"
Jeżeli mam rację, to on kłamie, bo taki DIV jest. Niżej...

help, help...

Najciekawsze jest to, że jak przerobię:

<script type="text/javascript">
var scroller = null;
var scrollbar = null;
function nol() {
scroller = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
}
window.onload = nol ();
</script>

na

<script type="text/javascript">
var scroller = null;
var scrollbar = null;
window.onload = function () {
scroller = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
}
</script>


TO DZIAŁA, przynajmniej na wejście na stronę...
Ale ja chciałbym to ajaxowo a nie tak normalnie...
everth
Dziwne, spróbuj przesunąć skrypty na sam koniec <body>, ew. spróbuj uruchomić nol() z użyciem $(document).ready() - co nie zmienia faktu że tego błędu raczej nie powinno być.
edgar72
skrypty na sam koniec <body> - niestety nie działa. A ten drugi sposób, to muszę się poduczyć, jak tego użyć sad.gif
everth
Przeczytałem twój post raz jeszcze. Zapomnij o moim poprzednim. O ile dobrze rozumiem to ty próbowałeś wywołać funkcję nol() w momencie przypisania jej do zdarzenia window.onload (tak przynajmniej interpretuję zapis window.onload = nol() ).
Czyli:
[JAVASCRIPT] pobierz, plaintext
  1. window.onload = nol();
[JAVASCRIPT] pobierz, plaintext

wywołuje tak naprawdę funkcję nol() w momencie przypisania. Ponieważ w danym momencie drzewo DOM jeszcze nie jest kompletne (dopiero jest parsowane) więc zawartość funkcji nol() wyrzuca błąd.

W drugim przypadku bindujesz funkcję anonimową z zdarzeniem onload więc funkcja jest uruchamiana w momencie gdy DOM jest już gotowy -> więc działa. Mimo to zajrzyj sobie do dokumentacji jQuery (zwłaszcza że go dołączasz) i zobacz jak się używa tam metody $(document).ready() - będziesz miał efekt szybciej i podejrzewam że z mniejszą ilością problemów między przeglądarkami.

Cytat
Ale ja chciałbym to ajaxowo a nie tak normalnie...

Ajax jest już passé. Zapoznaj się z dokumentacją jQuery.
edgar72
Hej, bardzo Ci dziękuję za analizę smile.gif
Pouczające są Twoje wskazówki. Na pewno pomogą mi w dalszym rozgrywaniu problemu.

Pozdrawiam serdecznie,
KK.
CuteOne
Cytat
Ajax jest już passé. Zapoznaj się z dokumentacją jQuery.

a jQuery to niby z czego korzysta... ?
everth
@UP
Pewnie z logiki choć głowy za to nie dam wink.gif
edgar72
Cześć,
Niestety nie poradziłem sobie z tym problemem. Brakuje mi pomysłów, jak to rozwiązać. Przecież to się wydaje takie proste smile.gif
Proszę Was jeszcze raz o wskazówki, ale bardziej dla początkującego, niż zaawansowanego.

Z góry dziękuję.
CuteOne
No przecież kolega wyżej napisał rozwiązanie $(document).ready() lub jak kto woli $(function() {
-edgar72-
Hej,
Zrobiłem tylko w nagłówku HEAD, o tak:

<script type="text/javascript">
var scroller = null;
var scrollbar = null;
$(document).ready(function {
scroller = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
});
</script>

Link ten sam, co w pierwszym poście, i jest SUPER smile.gif, ale tylko na wejście na stronę sad.gif Po wejściu gdzie indziej i powrocie (czyli kliknięciu w sub_05.html ORAZ ta_sama) suwaczek nie chce się przesuwać...

Czyli teraz działa na wejście, ale po przeładowaniu nie działa ani po podmianie DIVa z contentem z suwakiem...

Dzięki za dotychczasowe podpowiedzi, ale nadal nie wiem, jak zrobić, aby działało we wszystkich przypadkach.
Proszę o pomoc.
Gość
ERRATA - oczywiście zapomniałem wpisać "()", ale i tak nic się nie zminiło:

<script type="text/javascript">
var scroller = null;
var scrollbar = null;
$(document).ready(function() {
scroller = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
});
</script>
edgar72
Hej,
Czy miałby ktoś jeszcze jakiś pomysł na ten temacik?
kaem
Dziwna rzecz... Zobacz, że przy starcie strony div o id="Container" nie ma żadnych styli w swoim tagu, a po kliknięciu u góry w link z treścią już ma 'style="display: block;"'. Innym elementom też chyba się nowe style pokazują. Nie wiem czy to ma wogóle jakiś związek tongue.gif ale może pomoże.
edgar72
Hej,
sad.gif
Ja nie mam nadal pomysłów na to...

Ma ktoś jakiś pomysł?
A może jakoś zupełnie inaczej trzeba to napisać, - całość, z tą podmianą DIV...

Jak tak, to może macie jakies linki do rozwiązań? Mi się najlepiej uczy z takich "wzorców projektowych" smile.gif

Chyba, że ktoś wpadnie, jak tu zmienić, żeby w końcu jakoś to zadziałało. Tyle dni już kombinujemy... :/
-edgar72-
Cześć wszystkim,
Czy mogę liczyć jeszcze na jakieś wskazówki?
Gość
sad.gif
edgar72
Niestety jeszcze nie rozwikłałem tej chorej zagadki. Pliz o ew. pomoc. Jak nie uda się, to chyb aoleję ten temat i zrobię przeładowywanie klasyczne, bez żadnych jQuerowych podmian i ajaxowych funkcji...

Trochę zubożeje stronka, no ale co poradzić...
Pozdrawiam,
KK.
piotrooo89
W swoim DOM'ie po załadowaniu AJAX'a nie masz jeszcze tego elementu a Ty już chcesz dla niego wykonywać jakieś akcje (robić z niego przewijany pasek), upewnij się przed załadowaniem że masz to w DOM'ie i dopiero wtedy ładuj pasek przewijania.

Możesz tak to zrobić:

Kod
$('#Scroller-1').live('click', function(){
                  scroller  = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
                scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);  
                });
edgar72
Cześć,
Dzięki wielkie za wytłumaczenie i przykład. Niestety nie czaję, co źle robię, bo zmieniłem w pliku głównym, w sekcji <HEAD> na poniższe

  1. <script type="text/javascript">
  2. var scroller = null;
  3. var scrollbar = null;
  4. $(document).ready(function() {
  5. scroller = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
  6. scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
  7. });
  8. </script>


No i niestety teraz nic nie działa, nawet na wejście na stronę...
piotrooo89
Tak powinno działać, odsyłam do mauala jQ.
Kod
$(document).ready(function() {
    scroller  = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
    scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);

    $('.Scrollbar-Track').live('click', function(){
        scroller  = new jsScroller(document.getElementById("Scroller-1"), 800, 544);
        scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
    });
});
edgar72
Hej,
dzięki za kolejne wskazówki, jednak wydaje mi się, że problem jest bardziej złożony, niż można to ocenić na pierwszy rzut oka.

Po wklejeniu dokładnie tak, jak mi napisałeś, działa suwak, ale tylko na wejście na stronę (w zasadzie też działa jakoś dziwnie, to wydaje się, jakby za każdym przesunięciem suwaka odświeżał treść diva, czyli te napisy - dziwnie miga na ekranie). Niestety po przeładowaniu strony za pomocą linku lub po powrocie do niej z innej podstrony, suwak nie reaguje smile.gif

Złośliwość rzeczy martwych?
pozdrawiam,
KK.
piotrooo89
Wiesz wkleiłem ten kod do siebie, i wygląda działać ok, więc nie bardzo wiem co mógłbym Ci jeszcze poradzić.
Gość
Cześć wszystkim,
Dzięki za wszelkie wskazówki, sugestie i kawałek wiedzy.

Cieszę się, że udało się rozwiązać ten problem.
Jeszcze raz dziękuję smile.gif

...i do - poczytania!
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.