Ankündigung

Einklappen
Keine Ankündigung bisher.

Felder eines Formulares mit post über ajax übergeben

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

  • #31
    Hallo noch Mal,

    habe folgende Situation : Ich habe eine PHP-Datei namens "meinephp.php", die ich per Ajax aufrufe, die mir anhand einer ID einen Datensatz rausfischt was auch klappt.

    Das zusammengestellte PHP Array mit dem Suchergebnis (ich weiss eine ID ist einzigartig, ich bräuchte also vorerst noch kein Array aber hilft mir später wenn ich nach anderen Kriterien filtere
    die mehrere Datensätze finden) wandel ich mit Jason_encode um, so dass ich folgende Daten-Struktur mit der Alert Ausgabe erhalte: alert(response ) = [{´name´:´Müller´, ´id´:´1´}].

    Ist dies nun schon Jason ? Ich versuche vergebens, nur den Namen ausgeben zu lassen, z.B. alert(response.name) oder alert(response["name"] etc. aber ich bekomme es nicht hin.

    Ich hab auch schon versucht, die so erhaltenen Daten nochmals per $.parse umwandeln ($.parse(response)) . Wäre nett, wenn mir jemand auf die Sprünge helfen könnte.


    Code:
    mein PHP Script namens "mein php.php":
    
    <?php
    
    $conn = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $query = 'SELECT name, id FROM kunde WHERE id=' . $_POST['Id'];
    $stmt = $conn->prepare($query);
    $stmt->execute();
    $results = array();
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    $results[] = $row;
    }
    
    echo (json_encode($results));
    
    ?>
    Meine aufrufende Html Datei :

    PHP-Code:
    <html>

    <
    head>     
    <
    meta charset="utf-8"

    <
    script type "text/javascript"
            
    src "jquery-3.3.1.min.js"></script>

    <script type="text/javascript">

    function aendern() {
        var data = $("form").serialize();
        jQuery.ajax({
        type: "POST",
        url: "meinphp.php",
        data: data,
        cache: false,
        success: function(response)
        {
         alert (response);
        }
      });
     }

    $(document).ready( function() {
        $("form #SubmitForm").click( function() {
            aendern();
        });
    });

    </script>
    </head>

    <form> 
       Familienname:<br>
      <input type="text" name="familyname" autofocus><br>
       ID:<br>
      <input type="text" name="Id"><br><br>
      <button type="button" id="SubmitForm">Absenden</button>
    </form> 

    </html> 

    Kommentar


    • #32
      PHP-Code:
      var data = $.parseJSON(response); 

      Kommentar


      • #33
        Zitat von jonas3344 Beitrag anzeigen
        PHP-Code:
        var data = $.parseJSON(response); 
        Das ist Quatsch. jQuery erkennt JSON-Daten automatisch und deserialisiert sie.

        Anscheinend gibt der Webserver keine richtigen JSON-Daten aus. Schon mal in den HTTP-Header geschaut, ob der richtige Content-Type gesetzt ist?

        Kommentar


        • #34
          Hallo ihr beiden,

          Jonas : hab es mit var data = $.parseJSON(response) probiert und dann alert(data.name) aber keine Ausgabe des Namens ...
          @Heilbringer : sorry bin erst ein paar Wochen dabei und arbeite mich ein, wie kann ich das checken mit dem content type ? hab mal gegoogelt uns hab
          PHP-Code:
          enctype="multipart/form-data" 
          in meiner Form eingefügt, aber keine Besserung. Ausgabe ist immer noch der gleiche String wie gestern beschrieben.

          Kommentar


          • #35
            Debuggen in JavaScript mit console.log().

            HTML-Code:
            console.log(data);
            Dann in der Konsole der Dev-Tools nachsehen wie das aussieht.
            Und hellbringer hat natürlich Recht.
            Im PHP vor dem echo.

            PHP-Code:
              header('Content-Type: application/json'); 
            einfügen, dann sollte es ohne .parseJSON() tun.

            Kommentar


            • #36
              Zitat von jonas3344 Beitrag anzeigen
              Debuggen in JavaScript mit console.log().
              Debuggen mit Console.log?? Mühsam ernährt sich das Eichhörnchen...

              Man setzt in den Dev-Tools Haltepunkte und schaut sich die Variablen an.

              screenshot.PNG

              Kommentar


              • #37
                Es ist verrückt : ohne den Header zu setzen hab ich jetzt folgende Ausgabe bei console.log in Chrome : console.log(response); ergibt [{"name":"Asterix","id":"3"}]
                Hab dies mal durch den Jason Validator laufen lassen und der sagt mit ist gültiges Jason. Ausgabe von alert(response["name"]); ergibt UNDEFINED.

                Setze ich nun den Header im Php Script wie empfohlen direkt vor der Echo-Ausgabe von json_encode (also header('Content-Type: application/json'); ) dann
                erhalte ich [{…}] in console.log ... WTF ?

                Kommentar


                • #38
                  Schau Dir das Script oben an, das Problem ist eh ganz am Schluss, da reicht eine richtige Debug-Ausgabe. Aber halt nicht alert.
                  Gut, meine Aussage war vielleicht etwas zu allgemein.

                  Kommentar


                  • #39
                    Zitat von Midget Beitrag anzeigen
                    Es ist verrückt : ohne den Header zu setzen hab ich jetzt folgende Ausgabe bei console.log in Chrome : console.log(response); ergibt [{"name":"Asterix","id":"3"}]
                    Hab dies mal durch den Jason Validator laufen lassen und der sagt mit ist gültiges Jason. Ausgabe von alert(response["name"]); ergibt UNDEFINED.

                    Setze ich nun den Header im Php Script wie empfohlen direkt vor der Echo-Ausgabe von json_encode (also header('Content-Type: application/json'); ) dann
                    erhalte ich [{…}] in console.log ... WTF ?
                    Das ist nicht WTF. Das ist so, wie HTTP funktioniert. Du solltest dich mit den HTTP-Grundlagen beschäftigen, wenn du Webanwendungen programmieren möchtest. Wenn du nicht verstehst was du tust, wie willst du dann sinnvoll etwas programmieren?

                    Kommentar


                    • #40
                      Hallo.
                      Wollte nochmals nachfragen ob mir jemand noch zu meiner letzten Frage noch weiterhelfen kann.
                      Vielen Dank

                      Kommentar


                      • #41
                        Hallo,

                        mein fluchen hat geholfen, jetzt klappt es. Hatte mein Array mit dem Resultat falsch ausgelesen. Hatte versucht response.name musste aber lauten alert(response[0].name); da zweidimensionales Array.

                        Noch eine Frage zu Header : Muss der immer gesetzt werden beim Abfragen UND empfangen von Daten ? Also in meinem Beispiel konkret einmal setzen bei meiner Ajax Anfrage in meiner html Datei und dann nochmal
                        in meiner PHP Datei welche die Daten zusammenstellt ?

                        Hab gegoogelt und jetzt noch in meiner Ajax Anfrage an meine PHP Datei dataType: 'json', hinzugefügt.
                        Wird hierdurch der header in meiner PHP Datei überflüssig (also
                        PHP-Code:
                        header('Content-type: application/json'); 
                        ) denn wenn ich diese Codezeile weg lasse erhalte ich ebenfalls mein Resultat.

                        Danke schon mal für eure Zeit.

                        Kommentar


                        • #42
                          Da ich hier jetzt nicht wirklich eine Erklaerung schreiben will, verlinke ich einfach mal auf einen SO Beitrag, der das recht gut erklaert:

                          The usage of `header(“Content-type:application/json”);`

                          Kommentar


                          • #43
                            Zitat von Midget Beitrag anzeigen
                            Hab gegoogelt und jetzt noch in meiner Ajax Anfrage an meine PHP Datei dataType: 'json', hinzugefügt.
                            Wird hierdurch der header in meiner PHP Datei überflüssig (also
                            PHP-Code:
                            header('Content-type: application/json'); 
                            ) denn wenn ich diese Codezeile weg lasse erhalte ich ebenfalls mein Resultat.
                            Nur ist das halt ganz großer Murks. Der Webserver sagt dann, er liefert HTML-Code aus, und du sagst dem Client, er soll es ignorieren und als JSON interpretieren. Warum nicht gleich richtig machen statt so einen Blödsinn?

                            Kommentar


                            • #44
                              Zitat von Midget Beitrag anzeigen
                              Noch eine Frage zu Header : Muss der immer gesetzt werden beim Abfragen UND empfangen von Daten ?
                              Der header wird immer gesetzt und zwar vom Server. Schau in die Entwicklerkonsole deines Browsers F12 drücken und auf Network gehen, danach Seite aktualisieren mit F5.
                              Wenn du den header für die Ausgabe nicht anpasst, dann wird der Standard verwendet, was hellbringer ja schon gesagt hat.

                              Zitat von Midget Beitrag anzeigen
                              Wird hierdurch der header in meiner PHP Datei überflüssig (also
                              PHP-Code:
                              header('Content-type: application/json'); 
                              )
                              Nein.

                              Kommentar


                              • #45

                                Wenn man keinen header setzt, dann schickt der Server den Standard header für Text/html.
                                Also wenn man weiss, welche Daten man empfangen wird, dann immer besser der header zu setzen,
                                also in meinem konkreten Beispiel header("Content-type:application/json"), da ich Jason erwarte.

                                Danke.

                                Kommentar

                                Lädt...
                                X