Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Najpierw outfading, poten ajax+innerHTML, potem infading
Forum PHP.pl > Forum > Gotowe rozwiązania
expert
Mam taki kod:
  1. function aktualnosci(){
  2. $("#bodys").fadeOut("700");
  3. ajax_obiekt = typeof XMLHttpRequest == "undefined"?new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest();
  4.  
  5. if(ajax_obiekt)
  6. {
  7. var doda = '&a='+new Date().getTime();
  8. ajax_obiekt.open("POST", '../ajax.php?mode=aktualnosci'+doda);
  9.  
  10. ajax_obiekt.onreadystatechange = function()
  11. {
  12. if (ajax_obiekt.readyState == 1) {
  13. document.getElementById('loadbodys').style.display="";
  14. }
  15. if (ajax_obiekt.readyState == 4) {
  16. if (ajax_obiekt.status == 200) {
  17. document.getElementById('loadbodys').style.display="none";
  18. document.getElementById('bodys').innerHTML=ajax_obiekt.responseText;
  19. $("#bodys").fadeIn("700");
  20. }
  21. }
  22. }
  23.  
  24. ajax_obiekt.send(null); }
  25. }


Chodzi o to, że chce, żeby był najpierw outfading, potem ajax z pobraniem treści strony i podmiana w id="bodys", i potem infading.

Jednak niby wszystko dobrze działa, ale okazuje się, że podczas znikania jest zamieniana teść strony. Jak to rozwiązać?
singles
Jeśli już używasz jQuery, to dlaczego nie użyć wbudowanych w niego metod do obsługi AJAXa? Będzie prościej.

Zakładam, że obiekt którego treść podmieniasz ma id 'bodys', to może iść mniej więcej tak:

Kod
$('bodys').fadeOut(700, function() {
    var doda = '&a='+new Date().getTime();
    $(this).load('/ajax.php?mode=aktualnosci' + doda, function() {
        $(this).fadeIn(700);
    }    
}


Z tego co widzę w Twoim kodzie, to wysyłasz żądanie POSTem. U mnie napisałem za pomocą load(), a to korzysta z GETa. Twój kod nie wskazuje na to, żeby POST był potrzebny, ale w razie potrzeby możesz pokombinować z $.post().
expert
Coś tu jest nie tak, jak mam taki link:
  1. <a href="/pl/logowanie" onclick="login(); return false;">Logowanie</a>


i taki kod:
  1. function aktualnosci(){
  2. document.getElementById('loadbodys').style.display="";
  3. $('bodys').fadeOut(700, function() {
  4. var doda = '&a='+new Date().getTime();
  5. $(this).load('../ajax.php?mode=aktualnosci' + doda, function() {
  6. document.getElementById('loadbodys').style.display="none";
  7. $(this).fadeIn(700);
  8. }
  9. }
  10. }


to przechodzi mi do strony html /pl/logowanie a nie wykonuje się js, jak to było w przypadku 1 kodu, który podałem. $('#bodys') też nie łapie.
singles
Właśnie zauważyłem, że w moim kodzie jest błąd - powinno być $('#bodys') a nie $('bodys'), przepraszam.

Odnośnie tego co podałeś, nie widzę w jaki sposób kliknięcie na link ma odpalić funkcję aktualnosci(). Mój kod powinieneś traktować raczej jako szkielet, a nie gotowe rozwiązanie. W razie dalszych problemów napisz może, co ma się stać po kliknięciu na link, jakie divy mają zostać podmienione i jaką zawartością.
expert
twój kod działa, tylko trza dać nie bodys a #bodys i zmiast
}
}

to:
})
})
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-2024 Invision Power Services, Inc.