# Nachgeladenen div bei reload behalten



## Godstyle (15. August 2014)

Hallo alle,

folgendes Problem, ich habe auf der seite einen Div container, dieser wird je nach angeklickten link via ajax einfach ausgetauscht.

Nun ist mein Problem, dass wenn ich die Seite neulade ( F5) wieder zurück gesetzt wird und der standart div angezeigt wird.

Soweit auch logisch, nur wie kann ich trotz neuladen die informationen beibehalten, gibt es da einen befehl? 

Mein sonstiger weg wäre nämlich die infos in einer SESSION zu speichern die nur beim link anklicken geändert wird und so immer die richtigen Inhalte neuladen würde.

lg


----------



## SpiceLab (15. August 2014)

Clientseitig gibt es für diesen Anwendungsfall Cookies:

http://de.selfhtml.org/javascript/objekte/document.htm#cookie
http://plugins.jquery.com/cookie/ -falls jQuery zum Einsatz kommt-


----------



## Godstyle (15. August 2014)

Danke für den Tipp mit cookie. 
(jquery nutze ich nicht)
Also zum verständis, ich ändere wenn ich den link anklicke den wert im cookie, bei einem reload der seite wird das script nicht ausgeführt und ich kann somit am cookie wert erkennen welcher link zuletzt aufgerufen wurde. 

Soweit so gut, da ich selten mit cookies arbeite hab ich eine frage um zu wissen wie es abläuft um fehler ausgrenzen zu können beim testen.

Ich weiß das ich nicht auf cookies direkt zugreifen kann ohne das die Seite neugeladen oder gewechselt wurde, daher meine frage, wenn ich im js script den cookie setze und anschliesend eine datei in den div container lade, kann diese datei dann bereits auf den cookie zugreifen oder geht das auch erst nach dem neuladen der gesamten seite?

lg


----------



## SpiceLab (15. August 2014)

Zum besseren technischen Verständnis des Ablaufs (_set & get cookie_) studier mal diese Ressourcen:

http://www.w3schools.com/js/js_cookies.asp
https://developer.mozilla.org/en-US/docs/Web/API/document.cookie


----------



## ComFreek (15. August 2014)

Cookies würde ich dafür nicht empfehlen.

Zwei bessere Möglichkeiten:

- History API: http://diveintohtml5.info/history.html
- localStorage: https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

Ich würde die History API empfehlen, da der Nutzer hierbei auch die Seite mehrmals mit anderen DIVs geöffnet haben kann. Des Weiteren kann er die URL in seine Lesezeichen abspeichern.

Wenn du wirklich localStorage einsetzen möchtest, dann wären vielleicht folgende zwei Links noch interessant für dich:
- http://stackoverflow.com/questions/3220660/local-storage-vs-cookies
- http://stackoverflow.com/questions/...acks-to-using-localstorage-instead-of-cookies


----------



## SpiceLab (15. August 2014)

ComFreek hat gesagt.:


> Des Weiteren kann er die URL in seine Lesezeichen abspeichern.


Bei Verwendung eines Cookies ist der aktuelle Anzeigestatus des Seiteninhalts gleichermaßen in den Lesezeichen speicherbar.

Alles andere ist in meinen Augen eine persönliche Vorliebe.


----------



## ComFreek (15. August 2014)

Das ist richtig, aber ich meinte das etwas weit gefasster. Was passiert, wenn du die Cookies löschst? Dann funktioniert das Lesezeichen nicht mehr korrekt. Was passiert, wenn du den Link weiterschickst? Dein Freund wird nicht das sehen, was du siehst.
Ähnliche Probleme gab es bei Framesets.


----------



## SpiceLab (15. August 2014)

ComFreek hat gesagt.:


> Das ist richtig, aber ich meinte das etwas weit gefasster. Was passiert, wenn du die Cookies löschst? Dann funktioniert das Lesezeichen nicht mehr korrekt. Was passiert, wenn du den Link weiterschickst? Dein Freund wird nicht das sehen, was du siehst.


Was wäre wenn, ist wirklich weit gefasst - hätte hätte Fahrradkette 

Möglicherweise ist @Godstyle mit dem Cookie schon gedient.


----------



## Godstyle (15. August 2014)

Sooo, ich meld mich dann mal wieder, habe eure beiträge gelesen und mich nun für die variante mit der API History entschieden da sie mir am sinnvollsten erschien, das mit dem Neuladen funktioniert nun auch.

Ob es an meiner Unerfahrenheit liegt mag ich jetzt nicht leugnen, jedoch entsteht nun ein anderes Problem an der stelle wo ich noch einmal auf eure hilfe zurück greifen möchte, diesmal mit etwas quelltext.

Also Problem ist nun, das sich die brwoserurl ändert und immer weiter wenn ich die links anklicke erweitert wird und nicht der letzte Bereich ausgetauscht wird, bsp:

xxx.de/kontakt/
linkklick dann:
kontakt/link1/
link klick:
kontakt/link1/link2/

usw bis ich bei 5 ankomme wo die htacces auf einen fehler verweist was normal ist.

zunächst meine links:


```
<a href="support/" id="link1"><font color="#000000"><b>Support</b></font></a><br />
        <a href="jugendschutz/" id="link2"><font color="#000000"><b>Jugendschutz</b></font></a><br />
        <a href="werbung/" id="link3"><font color="#000000"><b>Werbung</b></font></a><br />
        <a href="sonstiges/" id="link4"><font color="#000000"><b>Sonstiges</b></font></a><br />
```

und nun das ajax script was nachlädt:


```
idArr = new Array("link1","link2","link3","link4");
    function $(id) {
        return document.getElementById(id);
    }
 
    window.onload = function() {     
        for(i = 0; i < idArr.length; i++){
            $(idArr[i]).onclick = function() {
               getHttpRequest(this.href);
               return false;
            }        
        }            
    }

    function getHttpRequest(url){
        getParam = url.substr(url.lastIndexOf('/kontakt/'));;

        var xmlhttp = null;
        // Mozilla
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        }
        // IE
        else if (window.ActiveXObject) {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }



   
        xmlhttp.open("GET", '/main_change.php' + getParam , true);
       
        xmlhttp.onreadystatechange = function() {
            if(xmlhttp.readyState != 4) {
                $('start_main_mid').innerHTML = 'Seite wird geladen ...';
            }
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                $('start_main_mid').innerHTML = xmlhttp.responseText;

            }
        }
        xmlhttp.send(null);      
    }
    function evalScript(scripts)
{    try
    {    if(scripts != '')  
        {    var script = "";
            scripts = scripts.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
                                        if (scripts !== null) script += arguments[1] + '\n';
                                         return '';});
            if(script) (window.execScript) ? window.execScript(script) : window.setTimeout(script, 0);
        }
        return false;
    }
    catch(e)
    {    alert(e)
    }
}// JavaScript Document
```

lg und danke für alle bisherigen beiträge


----------



## Godstyle (16. August 2014)

Ich melde mich dann noch einmal zu wort, gelöst habe ich das Problem nach wie vor nicht, trotz aller versuche ist es ein entweder oder spiel, sprich, entweder er ändert die adresszeile und lädt die seite nicht oder er lädt die seite und ändert die adresszeile nicht.

Daraufhin dachte ich mir dann das ich die adresszeile erst ändere wenn er den Inhalt geladen hat, das führt aber zu dem Problem das ich die url über htacces bereits geändert habe wodurch ich nicht mittels "$_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF']" etc die angezeigte Dmoain prüfen kann ob das unterverzeichnis verhanden ist.

Dies muss ich jedoch machen, da der neugeladene div sich selbst ausführen kann (kontaktformular das sich bei falscher eingabe selbst laden würde)

Wenn ich also beim laden des divs die domain ändern würde, dann würde er das auch beim selbst laden wodurch er anschliesend auf einen anderen umleiten würde.

Bin wirklich mit meinem Latein am ende, egal wie ich es versuche, irgendwas läuft schief.

Hier nochmal kurz was passieren soll:

links sind 4 links die den rechten div neuladen.
durch neuladen der seite soll der zuletzt gewählte link aktiv bleiben.

funktionieren tut es mit folgenden links:


```
<a href="?kontakt_kat=1&kat1=kontakt" id="link1"><font color="#000000"><b>Support</b></font></a><br />
                        <a href="?kontakt_kat=2&kat1=kontakt" id="link2"><font color="#000000"><b>Jugendschutz</b></font></a><br />
                        <a href="?kontakt_kat=3&kat1=kontakt" id="link3"><font color="#000000"><b>Werbung</b></font></a><br />
                        <a href="?kontakt_kat=4&kat1=kontakt" id="link4"><font color="#000000"><b>Sonstiges</b></font></a><br />
```

die domain sieht wie folgt aus:

domain.de/kontakt/

je nach gewähltem link sollte es sich erweitert auf zB:
domain.de/kontakt/support/

dann würde die richtige unterseite auch bei einem reload der seite gefunden werden.
sprich wenn ich einen angeklickt habe und dann einen anderen auswähle müsste es sich auf den anderen ändern und nicht zusätzlich anhängen.

lg


----------

