Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Przeładowanie strony po ajaxie
Forum PHP.pl > Forum > Przedszkole
lukasamd
Witam,
mam skrypt logowania tradycyjną metodą + do tego nałożone szybkie logowanie po ajaxie w jquery - wszystko działa pięknie tak jak chcę.
Problem w tym, że przypadku szybkiego, ajaxowego logowania wykonuję po odbiorze informacji o poprawnym zalogowaniu coś takiego:

Kod
document.location.href = document.location.href;


W efekcie strona / karta zostają odświeżone.
Co prawda w znacznie bardziej zautomatyzowany sposób, ale jednak nie jest to robione bez przekierowania.

Chciałbym natomiast zwracać całą stronę już po zalogowaniu.
Wiem jak to zrobić, o ile mam gdzie odebrane dane wrzucić np. do jakiegoś diva.

Problem jednak w tym, że takiego diva nie ma.
Samo PHP również nie zwróci mi strony bez nagłówka i stopki, a więc muszę wczytać wszystko.

Próby używania np. document.html() spełzły na niczym.
Jest to w ogóle wykonalne, czy jednak muszę ograniczyć dane przesyłane przez PHP i "upychać je" do konkretnego elementu?
vokiel
Po pierwsze, po co łączyć ajax'a z przeładowaniem strony? Z założenia ajax jest właśnie po to, aby żądania wysyłać asynchronicznie, bez przeładowania strony.

Jeśli jednak, chcesz odświeżyć zawartość całej strony po poprawnym zalogowaniu, to możesz sobie zrobić mniej więcej tak:
* skrypt js po stronie przeglądarki sprawdza logowanie, jeśli poprawne wysyła zapytanie do serwera o treść strony
* treść strony może być wypełnieniem poszczególnych bloków, bądź nawet na upartego cała zawartość bod
* odebrane dane wpisujesz do body zastępując to co w nim jest
sebekzosw
zrób sobie takie coś: wysyłasz info przez ajax dodając dodatkową dane w `data`, np.: "logowanie.php?action=ajax"

i w skrypcie php za pomocą ifów wyświetlasz to co chcesz zmienić

np nie chcesz wyświetlić nagłówka to wygladaloby to tak:
  1. if($_GET['action'] != 'ajax') include 'header.php';


mam nadzieje, ze rozumiesz co chce Ci przekazać ;>
lukasamd
No właśnie chcę uniknąć przeładowania smile.gif

Wiem jak ma to działać i mam tak zrobione - skrypt js sprawdza logowanie, otrzymuje obecnie info o statusie (np. error = 0 albo error = 1) i w zależności od nich wyświetla komunikat lub poprzez podany we wcześniejszym poscie kod dokonuje przeładowania.
Problem leży w tym, że skrypt nie za bardzo jest w stanie przesłać tylko zawartości body - jak już, to całość.

@sebekzosw:
Rozumiem, ale w takim wypadku chyba lepsze będzie ponowne przerobienie panelu dla usera i wysłanie tylko jego.
sebekzosw
możesz zrobić to w inny sposób... po pierwsze odbierać dane JSON z np.: logowanie.php. Pobierać takie dane jak status [0 - nie zalogowano, 1 - zalogowano] i treść a potem w JS odpowiedni warunek - jeżeli zalogowałeś się [status == 1] to zaktualizuj div z panelem, a jeżeli się nie zalogowałeś do z panelem nic nie robisz i wyświetlasz alert(tresc) (gdzie treść do jakiś komunikat) ...
vokiel
Możesz sprawdzać czy żądanie nastąpiło przez ajax'a, i jeśli tak to serwować sam content. Zmiana niezbyt duża.
  1. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']== 'XMLHttpRequest'){
  2. // ajax
  3. }
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.