Sporadisches PHP/AJAX Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sporadisches PHP/AJAX Problem

    Guten Morgen,

    seit zwei Tagen habe ich ein merkwürdiges Problem mit einem PHP-Script welches per AJAX aufgerufen wird.

    Im folgenden eine kurze Situatinsbeschreibung.

    Anhand einer Produktliste werden die einzelnen Produktdetails mittels der JavaScript-Funktion "getProduct()" an eine weitere JavaScript Funktion "saveProduct()" übergeben. Letztere startet dann den AJAX-Request an das PHP-Script.

    Die Daten werden auch korrekt übergeben. Mein Problem ist das das von AJAX aufgerufene PHP-Script mal die übermittelten Daten korrekt verarbeitet (und somit einen Antwort-Header zurückschickt) und mal nicht. Man könnte fast meinen, dass es je nach Lust und Laune arbeitet.

    Vielleicht findet ja hier jemand den Fehler! Aufgerufen wird es z.B. mittels (man. Umbruch wegen Forendarstellung!):
    Code:
    http://localhost/newsletter/save_products.php?id=1&
    pn=Asus%20-%20Garantieverl%E4ngerung%203J.%20f%FCr%20alle%20Ger%E4te
    &pp=100.5587&pd=&pi=2838_0.jpg
    Nun aber mal das PHP-Script was nicht so richtig will.

    PHP-Code:
    <?php
    ob_start
    ();
    session_start();
    header("Pragma: no-cache");
    header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
    header('Content-Type: application/xml; charset="utf-8"');

    include_once 
    'config.inc.php';

    if (!isset(
    $_GET['id'])) {
        die(
    '<response>Error!</response>');    
    }

    $id = (int)$_GET['id'];

    $_SESSION['product'][$id]['n'] = urldecode($_GET['pn']);
    $_SESSION['product'][$id]['p'] = urldecode($_GET['pp']);
    $_SESSION['product'][$id]['d'] = urldecode($_GET['pd']);
    $_SESSION['product'][$id]['i'] = urldecode($_GET['pi']);

    echo(
    '<response>ok</response>');
    ob_end_flush();
    ?>
    Und hier das was ich als Header mittels Firebug zurück bekomme wenn es klappt. Vielleicht hilft das ja!

    Host localhost
    User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9) Gecko/2008052906 Firefox/3.0
    Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding gzip,deflate
    Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive 300
    Connection keep-alive
    Referer http://localhost/newsletter/index.php?step=2
    Cookie PHPSESSID=fccab4bf1dd9f98873b944c77ccb4673
    Freundiche Grüße

    zaubatrik
    screennetz.de

  • #2
    Mal ein wenig Debuggen, so ins Blaue schießen ist wenig Produktiv. Mach doch mal ein paar Testausgaben, error_reporting hochschalten!

    Und hier das was ich als Header mittels Firebug zurück bekomme wenn es klappt. Vielleicht hilft das ja!
    Das sind die Request-Header.

    Kommentar


    • #3
      Da hab ich wohl fälschlicherweise den Anfrage- statt des Antwort-Headers gepostet. Hier ist der korrekte.

      Code:
      Date	Wed, 09 Jul 2008 07:34:31 GMT
      Server	Apache/2.2.8 (Win32) DAV/2 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5
      X-Powered-By	PHP/5.2.5
      Expires	Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control	no-store, no-cache, max-age=0, must-revalidate
      Pragma	no-cache
      Content-Length	23
      Keep-Alive	timeout=5, max=98
      Connection	Keep-Alive
      Content-Type	application/xml; charset="utf-8"
      Testausgaben hab ich massig. Dort stimmt auch alles. wenn ich mir $_GET vom Script als Antwort zurück geben lasse, dann sind dort auch sämtliche Daten drin. Aber aus irgendeinem Grund werden die Daten nicht in die Session geschrieben.
      screennetz.de

      Kommentar


      • #4
        SID überprüft?

        Kommentar


        • #5
          Hi TobiaZ,

          ja die Session-Ids sind immer identisch.
          Das lustige ist ja das sich das Problem nicht reproduzieren läst. Sonst könte man dort weiter ansetzen.

          Kann mir nur noch vorstellen, dass der Produktname welcher an das PHP-Script per GET übergeben wird das Problem aufruft. Es gibt leider auch absolut keine Fehlermeldungen, weder von PHP nch von JS.
          screennetz.de

          Kommentar


          • #6
            Verlässt sich dein Skript auf den Session-Cookie? Sind diese am Client deaktiviert, wird deine SID natürlich nicht mehr übertragen. Hast du sichergestellt, dass die SID auch ohne Cookies weitergetragen wird?

            Kommentar


            • #7
              Hallo,

              nach langem Debuggen hab ich das Problem endlich gefunden und gelöst.

              Das Problem war das zu frühe automatische schliessen des Popup-Fensters aus dem der AJAX-Request gestartet wurde. Je nach dem wie lange das Script braucht klappte es oder eben nicht. Da die Funktion zum schließen des Fensters nicht so lange gewartet hat bis der AJAX-Request fertig war. Dadurch wurde das AJAX-Script wohl abgebrochen und es gab keinen Anwort-Header.

              Thema kann dann geschlossen werden!
              screennetz.de

              Kommentar


              • #8
                Dadurch wurde das AJAX-Script wohl abgebrochen und es gab keinen Anwort-Header.
                ignore_user_abort

                Kommentar

                Lädt...
                X