Autor Zpráva
Fisak
Profil
Dobrý den. Mám pomocí ajaxu vytvořené načítání stránky...
<script>
          Casovac();

            function NewHodnota() {
      var xmlhttp;
            var    hodnotalist = document.getElementById('hodnota_list');
                if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
                else xmlhttpp=new ActiveXObject("Microsoft.XMLHTTP"); 
                xmlhttp.onreadystatechange=function() {
                  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                      hodnotalist.innerHTML = xmlhttp.responseText;
                }    
              }    
        var sesiChat = <?php echo $_SESSION['uss_id']; ?>;
                xmlhttp.open("GET", "./../../plugins/php/chat_list.php?whats="+ sesiChat, true);
                xmlhttp.send(); 
              Casovac();
            }
    
            function Casovac() { 
                 setTimeout("NewHodnota()", 1000);
            }
</script>
<span id='hodnota_list'></span>
A v "chat_list.php" mám script který obsahuje "header('Location: /logout/');" Vše funguje ovšem přesměruje se mi jen část stránky nikoli celá stránka.. neví si někdo rady ?
preca1
Profil
Zdravim,
jestli sem to dobře pochopil, budeš to přesměrování muset udělat až v JS.
Fisak
Profil
preca1:
Toho jsem se bál.. V JS nejsem moc zdatný.. Alespoň něco po čem bych měl pátrat ?
honzaik
Profil
jako nevim jestli to dobre chapu ale ten logout muzes udelat taky pres ajax. treba jako ze posles GET/POST v tom treba user id a nejaky blbustky (nevim jak to mas udelany). a ten skript uzivatele odhlasi, pak teda budes muset javascriptem refreshnout stránku aby to melo efekt. jako fungovat to nemusi, zalezi na tom jak mas ten lougout script udelanej.
preca1
Profil
Fisak:
V odpovědi ze serveru budeš muset mít nějakej příznak, že proběhlo odhlášení a že bys měl uživatele přesměrovat.
A pak si vyhledej javascript přesměrování a snad najdeš nějaké užitečné příklady. Pomůže ti objekt location a jeho atributy/metody.
_es
Profil
Fisak:
přesměruje se mi jen část stránky nikoli celá stránka.
Asi si celkom nepochopil základné princípy. AJAX je práve na to, aby sa nemusela znovu načítavať celá stránka. Ak chceš obnoviť celú stránku, či ju niekam presmerovať, nepotrebuješ AJAX.
preca1
Profil
_es:
V tomto konkrétním případě potřebuje. Zavolá AJAX (např. aby periodicky zkontroloval, jestli uživateli někdo nenapsal), zjistí, že uživateli vypršelo sezení (např. si smaže cookies) a potřebuje uživatele odhlásit, jak to uděláš?
Jedna možnost je honzaikovo řešení (čistě JS, bez přesměrování, ale složitější na implementaci), druhá je uživatele odhlásit (např. smazat sezení z DB, ze serverů, atd) a hodit ho na přihlašovací stránku.
Pokud by si v onom spracovávajícím scriptu zavolal nějaké přesměrování (což dělá on), jeho výsledek se ti promítne akoát do odpovědi onoho AJAXového volání, nikoli do celé stránky.
Fisak
Profil
Četl jsem http://stackoverflow.com/questions/9851792/php-header-called-via-ajax-not-working-properly a zde píšou že stačí dát exit; za header() co jsem pochopil. Ale bohužel ani tato varianta nefunguje..


Nakonec jsem to vyřešil takto:
echo "<meta http-equiv=\"refresh\" content=\"0;url=/login/3/\">";
        exit;
Chamurappi
Profil
Reaguji na Fisaka:
To ti funguje ve všech prohlížečích?
Já bych to na tvém místě zkusil vyřešit tak, že bych si třeba poslal nějakou další HTTP hlavičku a tu bych na straně klienta přečetl. (To jsem sice vlastně ještě nikdy nezkoušel, ale mělo by to jít…)
Nebo bych si poslal v odpovědi něco, co bych byl schopný v JS zachytit (místo toho, abych to dal do innerHTML).
Fisak
Profil
Chamurappi:
Zkusím jestli to funguje ve všech prohlížečích.. A kdyžtak zkusím jiný způsob.


tak to funguje jen v chormu.. Zkoušel jsem to v mozile a exploreru a tam to bohužel nefunguje :-/

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0