jQuery load() Funtion - PHP Datei kennt SESSION nicht mehr

  • Hallo Leute,

    und zwar habe ich eine PHP Datei, in der ich eine Tabelle aus einer anderen Datei mit "include()" einbinde.
    Jetzt möchte ich, dass diese Tabelle mit einem Klick aktualisiert wird, ohne dass die Seite neulädt.
    Also benutze ich jQuery's load() Funktion, um die besagte Tabelle neu zu laden. Das Problem ist, dass er dann die SESSION-Variable nicht mehr kennt,
    die ich zur Erstellung der Tabelle brauche. Und nein, session_start() ist drin. Bitte um Hilfe.

    Vielen Dank im Voraus!

    LG

  • Hab eine DIV mit der ID "tblItems":

    HTML
    <div id="tblItems">
      [code=php]
        include 'tblSelectedItems.php';


    <div>
    [/code]


    Der JavaScript Teil:


    Die Datei mit der Tabelle:

    PHP
    if (isset($_SESSION['selectedItems']) && !empty($_SESSION['selectedItems'])) {
      // irgendwas
    }


    Das Problem ist: nach dem die load() Funktion die Datei jetzt reinladet, kennt er da die SESSION nicht mehr.

    • Offizieller Beitrag

    Also erstmal machst Du viel zu viel. Du startest zwei Requests. Einmal mit $.post('../selectedItems.php') und darin dann mit load('tblSelectedItems.php') erneut.
    Zeig mal bitte beide Dateien komplett ( selectedItems.php und tblSelectedItems.php ).

  • selectedItems.php


    tblSelectedItems.php

  • in selectedItems.php ist session_start() drin (Zeile 3).
    In tblSelectedItems.php ist kein session_start(), weil die Datei in eine andere Datei "included" wird, und die wiederum hat session_start() am Anfang.
    Wenn ich in tblSelectedItems.php ein session_start() hinzufüge, kommt die Fehlermeldung dass ich das bereits habe und das an der Stelle ignoriert wird.

    • Offizieller Beitrag
    Zitat

    in selectedItems.php ist session_start() drin (Zeile 3).

    Stimmt... Habe ich übersehen, weil ich das ganz als erstes erwartet habe...

    Zitat

    In tblSelectedItems.php ist kein session_start(), weil die Datei in eine andere Datei "included" wird, und die wiederum hat session_start() am Anfang.
    Wenn ich in tblSelectedItems.php ein session_start() hinzufüge, kommt die Fehlermeldung dass ich das bereits habe und das an der Stelle ignoriert wird.


    Grundsätzlich ist das Verhalten korrekt, denn Du startest einen neuen XmlHttpRequest, ganz egal ob Du nun $.post oder load() verwendest. Und damit er die Session behält, musst Du auch in den Ziel-Dateien immer ein session_start() haben.

    Natürlich meckert er, wenn Du auf der anderen Seite die Datei einbindest, während dort bereits ein session_start() gesetzt wurde.
    Entweder Du denkst komplett um und regelst den asynchronen Prozess über eine komplett eigenständige Datei ( meine Empfehlung! ) oder Du prüfst in der includierten Datei einfach ob session_start() schon gesetzt wurde.

    Dies kannst Du bspw. prüfen, indem Du bei Ersterstellung der Session einen Parameter setzt:

    PHP
    $_SESSION['is_active'] = true;

    Diesen kannst Du dann in der zu inkludierenden Datei prüfen:

    PHP
    if ( !isset($_SESSION['is_active']) )
        session_start()
    • Offizieller Beitrag

    Damit meine ich, dass Du das, was Du in zwei Requests machst in einem machen solltest.
    In der selectedItems.php sehe ich grundsätzlich auch keinen Response, daher kannst Du die einfach mit der tblSelectedItems.php zusammenführen.
    Dann würde ein $.post() reichen. Die Rückgabe ( Response ) kannst Du dann ähnlich wie bei load() mit html() an den DIV hängen.

    Siehe dazu die Beispiele hier: Doku jQuery $.post