Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ajax und PHP auf selber Seite

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

  • [Erledigt] Ajax und PHP auf selber Seite

    Ich habe einen Text und einen Button, der bei Klick einen von PHP generierten Text in eine DIV-Box schreiben soll. Das Ganze befindet sich auf einer Seite und soll mit Ajax realisiert werden:

    PHP-Code:
    <?php
    if(isset($_GET['action']))
    {
    switch(
    $_GET['action'])
    {
    case 
    'ajax':
        echo 
    'Hier ist Ajax';
    break;
        
    default:
              echo 
    'fehler';
    break;
    }
    }
    ?>
    Code:
    <script type="text/javascript">
    function CreateXmlHttpObjet()
    {
      var xmlHttpObject = null;
    
      try
      {
        // Firefox, Opera 8.0+, Safari
        xmlHttpObject = new XMLHttpRequest();
      }
      catch( e )
      {
        // Internet Explorer
        try
        {
          xmlHttpObject = new ActiveXObject( "Msxml2.XMLHTTP" );
        }
        catch( e )
        {
          xmlHttpObject = new ActiveXObject( "Microsoft.XMLHTTP" );
        }
      }
      
      return xmlHttpObject;
    }
    
    function loadContent()
    {
    	xmlHttpObject = CreateXmlHttpObjet();
        xmlHttpObject.open('get','board1.php?action=ajax', true);
        xmlHttpObject.onreadystatechange = handleContent;
        xmlHttpObject.send(null);
        return false;
    }
    
    function handleContent()
    {
        if (xmlHttpObject.readyState == 4)
        {
            document.getElementById('inhalt').innerHTML = xmlHttpObject.responseText;
        }
    }
    </script>
    
    <p>Ich werde nicht neu geladen</p>
    <div id="inhalt" style="border: solid;">
        <a href="#" onclick="loadContent()">Klick mich</a>.<br>
    	was kommt gleich?
    </div>
    Der Inhalt der DIV-Box soll überschrieben werden, allerdings bleibt der alte Inhalt drin und es kommt neuer hinzu. Ich habe das Gefühl, als würde die Seite einfach nochmal "reingeladen" werden.


    Wenn ich den Inhalt aber aus einer externen Datei reinlade:

    PHP-Code:
    <?php
    if(isset($_GET['param'])){
        
        echo 
    $var "externe datei ueber ajax geht!";
    }else{
        echo 
    "externe datei: param nicht gesetzt";
    }
    ?>
    Und die eine Zeile entsprechend anpasse:

    Code:
    xmlHttpObject.open('get','ajax.php?param=bla');
    funktioniert alles einwandfrei.

    Sieht jemand den Fehler?

    Danke!


  • #2
    Sicher? Dein Code-Schnipsel von der PHP-Seite ist unvollständig fürchte ich. So zumindest macht es nicht das von dir beschriebene.

    Bitte installiere dir Firebug im Forefox und schau dir Request/Response deines Ajax-Aufrufes selbst an. Oder im IE8 mittels eingebautem Debugger.
    www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
    Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih

    Kommentar


    • #3
      Was denn nun? $_GET['param'] oder $_GET['action']?
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Sicher? Dein Code-Schnipsel von der PHP-Seite ist unvollständig fürchte ich. So zumindest macht es nicht das von dir beschriebene.
        Ich habs grad nochmal getestet, es ist alles, wie von mir beschrieben, sofern ich meine Gedanken richtig fassen konnte...

        Was denn nun? $_GET['param'] oder $_GET['action']?
        Das sind ja 2 verschiedene Dateien, spielt also in dem Fall keine Rolle.

        Um Missverständnisse bezüglich mehrerer Dateien auszuschließen, hier nochmal die beiden Dateien getrennt:

        PHP-Code:
        <?php
        if(isset($_GET['action']))
        {
        switch(
        $_GET['action'])
        {
        case 
        'ajax':
            echo 
        'Hier ist Ajax';
        break;
            
        default:
                  echo 
        'fehler';
        break;
        }
        }
        ?> 


        <script type="text/javascript">
        function CreateXmlHttpObjet()
        {
          var xmlHttpObject = null;

          try
          {
            // Firefox, Opera 8.0+, Safari
            xmlHttpObject = new XMLHttpRequest();
          }
          catch( e )
          {
            // Internet Explorer
            try
            {
              xmlHttpObject = new ActiveXObject( "Msxml2.XMLHTTP" );
            }
            catch( e )
            {
              xmlHttpObject = new ActiveXObject( "Microsoft.XMLHTTP" );
            }
          }
          
          return xmlHttpObject;
        }

        function loadContent()
        {
            xmlHttpObject = CreateXmlHttpObjet();
            xmlHttpObject.open('get','board1.php?action=ajax', true); // Hier wird die selbe Seite nochmal aufgerufen
            //xmlHttpObject.open('get','ajax.php?action=ajax'); // Hier kommt der Inhalt aus einer externen Datei, die ich weiter unten eingefügt habe
            xmlHttpObject.onreadystatechange = handleContent;
            xmlHttpObject.send(null);
            return false;
        }

        function handleContent()
        {
            if (xmlHttpObject.readyState == 4)
            {
                document.getElementById('inhalt').innerHTML = xmlHttpObject.responseText;
            }
        }
        </script>

        <p>Ich werde nicht neu geladen</p>
        <div id="inhalt" style="border: solid;">
            <a href="#" onclick="loadContent()">Klick mich</a>.<br>
            was kommt gleich?
        </div>
        Externe Datei:
        Code:
        <?php
        
        if(isset($_GET['action'])){
        	
        	echo "externe datei ueber ajax geht!";
        }else{
        	echo "externe datei: param nicht gesetzt";
        }
        
        ?>

        Kommentar


        • #5
          Alleine schon das Fehlen einer exit; Anweisung dürfte problematisch sein.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Zitat von nikosch Beitrag anzeigen
            Alleine schon das Fehlen einer exit; Anweisung dürfte problematisch sein.
            In der ersten oder zweiten Datei? Die zweite (externe) Datei übergibt den Code ja problemlos. Bei der ersten Datei gibt es Probleme.

            Ich habe 3 Bilder hochgeladen:
            1. Anfang: So wie es am Anfang aussieht
            2. Selbe: Das (fehlerhafte) Ergebnis, wenn sich die Datei selbst nochmal lädt
            3. Extern: Das (erwünschte) Ergebnis, wenn der Inhalt aus der externen Datei kommt
            Angehängte Dateien

            Kommentar


            • #7
              Keine Ahnung, was einem die Bilder sagen sollen. Wo exit; hingehört, bekommst DU mit etwas Nachdenken auch selbst raus..
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Die Erklärung zu den Bildern hab ich sogar mal mitgepostet.
                Es sind einfach die Screenshots der Dateien, um das Problem zu veranschaulichen und damit ihr den Code nicht selber ausführen braucht.
                exit(); kann ja nur ans Ende der zweiten Datei gehören, welche aber fehlerfrei funktioniert. Es geht mir eben um die erste Datei.

                Kommentar


                • #9
                  Was sollte exit; am Ende einer Datei für einen Sinn haben?!
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Habs jetzt:
                    PHP-Code:
                    if(isset($_GET['action']))
                    {
                    $zahl rand(5,100);
                    switch(
                    $_GET['action'])
                    {
                    case 
                    'ajax':
                        echo 
                    $zahl;
                    break;
                        
                    default:
                              echo 
                    "fehler";
                    break;
                    }
                    exit();

                    Dankeschön!

                    Kommentar

                    Lädt...
                    X