Anno Rudi: Rückgabe einer Variablen an die ajax Funktion aus der php Datei

Hallo zusammen

ich will es einfach nicht schaffen, mit ajax eine sql Abfrage zu starten und das Ergebnis zurückbekommen zu können. Es handelt sich ja um eine Abfrage und das Ergebnis muss ja erst einmal zusammengestellt werden.

Also führe ich eine Abfrage aus und lasse eine Schleife durchlaufen, die mir das Ergebnis in einer Variablen zusammenstellt. Doch wie bekomme ich dieses Ergebnis an die ajax Funktion wieder zurück?

Ich schreibe ja schon eine Variante, und zwar dass ich Echo reinschreibe und ja eigentlich die Werte zurückbekomme. Doch würde ich gerne wissen ob es denn nicht möglich wäre, irgendwie auch ohne den Inhalt der Datei zurückgeben zu lassen?

Danke für all Eure Hilffe, mit Gruß Rudi

  1. Hallo Rudi,

    ich will es einfach nicht schaffen, mit ajax eine sql Abfrage zu starten und das Ergebnis zurückbekommen zu können. Es handelt sich ja um eine Abfrage und das Ergebnis muss ja erst einmal zusammengestellt werden.

    ja, aber das ist so ziemlich der einzige Aspekt deines Beitrags, dem ich folgen kann. Ich verstehe aber nicht, wo denn konkret dein Problem liegt, dafür sind deine Informationen zu knapp.

    Also führe ich eine Abfrage aus und lasse eine Schleife durchlaufen, die mir das Ergebnis in einer Variablen zusammenstellt. Doch wie bekomme ich dieses Ergebnis an die ajax Funktion wieder zurück?

    Trenne den gesamten Vorgang gedanklich in drei Abschnitte:

    1. Javascript sendet einen HTTP-Request.
    2. Dieser Request wird vom Server bearbeitet (könnte z.B. ein PHP-Script sein) und der schickt die Antwort an den anfragenden Client zurück.
    3. Javascript nimmt die Antwort entgegen und verarbeitet sie geeignet weiter.

    Dabei laufen die Schritte 2 und 3 üblicherweise asynchron ab, d.h. das auslösende Javascript läuft weiter, anstatt auf der Stelle zu treten und auf die Antwort zu warten (obwohl man auch das erzingen kann - möchte man aber meist nicht). Um die Antwort zur Kenntnis zu nehmen, notiert man im XHR-Objekt eine sogenannte Callback-Funktion, also eine Funktion, die vom Browser automatisch aufgerufen wird, sobald die Antwort vom Server eingetroffen ist.

    Ich schreibe ja schon eine Variante, und zwar dass ich Echo reinschreibe und ja eigentlich die Werte zurückbekomme. Doch würde ich gerne wissen ob es denn nicht möglich wäre, irgendwie auch ohne den Inhalt der Datei zurückgeben zu lassen?

    Wie bitte?

    So long,
     Martin

    1. Hallo Martin,

      ich weis nicht was ich hier jetzt noch von mir vorstellen sollem da ja eine ajax Funktion bekannt sein sollte und ja auch überall im Netz zu lesen ist:

      result = $.ajax({
      type: "POST",
      async: false,
      url: "SelectBereich.php",
      data: ({
      Database: "Datenbank",
      Table: "Bereiche"
      })
      }).responseText;
      

      Auch diese Variante entnahm ich dem Netz, wobei ich sonst immer die Variante mit dem Parameter success: function(data) verwende und aber mit beiden nicht zum Ziel komme. Denn ich will ja wissen wie ich aus der php Datei Werte wieder zurück bekomme. Und da sollte es doch reichen zu beschreiben, dass ich eine Abfrage ausführe und dann eine Schleife ausführe die mir die Daten zusammenstellt. Und was ist daran so unverständlich, dass ich in eine php Datei echo "$Variable"; schreibe? Und dass ich nur mit dieser Zeile den Wert zurückbekommen kann.

      Doch will ich ja wissen wie man aus einer php Datei Werte zurück bekommen kann?

      Also schonmal vielen Dank für alle Bemühungen und ich freue mich auf die Klärung meiner Anfrage an Euch!

      Gruß Rudi

      1. ich weis nicht was ich hier jetzt noch von mir vorstellen sollen da ja eine ajax Funktion bekannt sein sollte und ja auch überall im Netz zu lesen ist:

        "Überall im Netz" stehen ganz verschiedene Varianten die bei verschiedenen Aufgaben richtig, bei anderen falsch sind. Hinzu kommen Varianten die ganz falsch (genauer: "kaputt") sind.

        Wenn Du brauchbare Hilfe haben willst, dann zeige uns was Dein PHP-Skript genau sendet (das kann man sich in den Entwicklertools ansehen und kopieren) und Dein Javascript.

      2. Hallo,

        ich weis nicht was ich hier jetzt noch von mir vorstellen sollem da ja eine ajax Funktion bekannt sein sollte und ja auch überall im Netz zu lesen ist:

        aber du hast mit keinem Wort beschrieben, wie der Aufruf in deinem Fall realisiert ist. Fehler können sich überall einschleichen, seien es einfache Tippfehler oder grobe Verständnisfehler.

        result = $.ajax({
        type: "POST",
        async: false,
        url: "SelectBereich.php",
        data: ({
        Database: "Datenbank",
        Table: "Bereiche"
        })
        }).responseText;
        

        Genau, das ist eine Information, mit der man was anfangen kann. Du verwendest also nicht die eigentlich bevorzugte asynchrone Variante, sondern lässt dein Javascript auf das Ergebnis warten. Was mich stutzig macht, ist der Parameter data. Meines Wissens wird da ein einfacher String erwartet und kein Objekt. Hast du mal überprüft, was da beim Request wirklich rausgeht? Ist es das, was dein serverseitiges Script erwartet?

        Auch diese Variante entnahm ich dem Netz, wobei ich sonst immer die Variante mit dem Parameter success: function(data) verwende und aber mit beiden nicht zum Ziel komme.

        Gut, also muss ich weiter fragen: Was heißt "nicht zum Ziel komme"? Was genau passiert bei der oben gezeigten synchronen Variante? Welche Parameter kommen in PHP an? Welchen Wert hat responseText nach dem Funktionsaufruf?
        Es nützt nichts, wenn du einfach feststellst "es geht nicht". Debugging heißt, den Ablauf Schritt für Schritt nachzuvollziehen und die Werte zu kontrollieren, um so die Stelle einzukreisen, wo plötzlich etwas anderes passiert als erwartet.

        Denn ich will ja wissen wie ich aus der php Datei Werte wieder zurück bekomme.

        Genau so wie du es hier skizziert hast. Nur wissen wir nicht, was das PHP-Script wirklich ausgibt. Vielleicht irgendwelchen Unfug, weil die übergebenen Parameter nicht das sind, was du erwartest.

        Und da sollte es doch reichen zu beschreiben, dass ich eine Abfrage ausführe und dann eine Schleife ausführe die mir die Daten zusammenstellt.

        Nein. Konkreten Code zeigen, und möglichst noch Angaben dazu, welche Werte die beteiligten Variablen haben - wirklich haben, nicht welche Werte du vermutest.

        Und was ist daran so unverständlich, dass ich in eine php Datei echo "$Variable"; schreibe?

        Es ist zunächst mal Unsinn, eine einzelne Variable bei der Ausgabe mit echo noch in einen String einzubetten. Ansonsten ist das nicht unverständlich. Aber es stand in deinem Ausgangsposting (das du anscheinend unter einem gan anderen namen verfasst hast) nicht so klar drin.

        Doch will ich ja wissen wie man aus einer php Datei Werte zurück bekommen kann?

        Genau so wie du es beschreibst. Wenn da etwas schiefgeht, muss man den Ablauf sauber verfolgen. Und das geht nicht, ohne den Helfern den exakten Code und die exakten Werte zu zeigen.

        So long,
         Martin

        1. OK und damit auch Hallo Martin,

          ich bedanke mich schonmal und bitte zu entschuldigen, nicht php Code gezeigt zu haben. Denn der Ablauf in der Datei, so dachte ich, sollte doch nachzuvollziehen sein und damit Code überflüssig macht.

          Und dann lasse ich mir halt die Daten aus dem $_request('Datenbank') per echo zurückgeben, was mit und ohne dem Parameter asynchron:false funktioniert. Doch wollte ich ja wissen wie man das auch ohne hinbekommt, da ich ja auch auf den data Parameter ganz verzichten könnte.

          Aber nun gut, dann funktionierts alt so und ich bedanke mich für jede Bemühungen. Und für die fehlgeschlagene Namensgebung möchte ich mich hiermit auch entschuldigen.

          Also dann mit Gruße Anno Rudi!

      3. Lieber Andreas Nagel/Anno Rudi,

        wenn Du Dir nicht angewöhnst, bei Deinen Nachfragen von vornherein Code-Beispiele mitzugeben, dann wird das hier jedes Mal eine Tortur.

        ich weis nicht was ich hier jetzt noch von mir vorstellen sollem da ja eine ajax Funktion bekannt sein sollte und ja auch überall im Netz zu lesen ist:

        Du meinst, dass wir hier immer mit aus dem Netz geklaubten Code-Schnipseln arbeiten, die immer und grundsätzlich einem Standard folgen? Dann solltest Du schleunigst lernen, dass Code immer einem Zweck dient und für diesen Zweck maßgeschneidert werden muss. Was für Dein gefundenes Code-Schnipselchen als Kontext gegolten haben mag, lässt sich nur aus der von Dir benutzten Quelle ableiten. In Deinem Projekt kann das ganz schnell anders aussehen. Also erwarte niemals von uns, dass wir Dein Projekt kennen und Dir gefälligst gleich und ohne lästige Nachfragen die direkte Lösung aufzusagen hätten!

        Auch diese Variante entnahm ich dem Netz, wobei ich sonst immer die Variante mit dem Parameter success: function(data) verwende und aber mit beiden nicht zum Ziel komme.

        Wo hast Du denn angefangen an der grundsätzlichen Funktionsweise etwas dazuzulernen? Mir scheint, Du willst etwas bauen, von dem Dir völlig egal ist, wie es funktioniert, Hauptsache dass es funktioniert. Und genau damit, mein Lieber, bist Du hier falsch, denn das Motto von SELFHTML ist nach wie vor "Die Energie des Verstehens"!

        Denn ich will ja wissen wie ich aus der php Datei Werte wieder zurück bekomme.

        Das klingt hoffnungsvoll im Sinne von "ich will lernen". Ist das auch wirklich so gemeint?

        Und da sollte es doch reichen zu beschreiben, dass ich eine Abfrage ausführe und dann eine Schleife ausführe die mir die Daten zusammenstellt.

        Nö. Das reicht deshalb nicht, weil niemand weiß, wie die Struktur Deiner Daten wirklich aussieht.

        Und was ist daran so unverständlich, dass ich in eine php Datei echo "$Variable"; schreibe? Und dass ich nur mit dieser Zeile den Wert zurückbekommen kann.

        Weil kein Mensch ahnen kann, was in $Variable genau steht, ist Deine Fragestellung für unsereins unverständlich. Auch kann niemand wissen, mit welchen Header-Daten Dein PHP-Script diese Daten ausliefert. Und für ein XmlHTTPRequest-Objekt ist es keinesfalls egal, wie Deine Daten strukturiert sind, und mit welchen Header-Angaben sie ankommen!

        Doch will ich ja wissen wie man aus einer php Datei Werte zurück bekommen kann?

        Durch echo. Wie denn sonst?

        Also schonmal vielen Dank für alle Bemühungen und ich freue mich auf die Klärung meiner Anfrage an Euch!

        Meine Vermutung ist, dass Du ein Problem in Sachen Kommunikation und Umgang mit anderen hast. Deshalb ist es lästig, bei Deinen Fragen immer erst mit Nachfragen die notwendigen Fakten aus Deiner Nase zu ziehen, um in Deiner Antwort gleich noch Deine Ungehaltenheit mitgeliefert zu bekommen, die der Sache nun wirklich nicht dient. So macht das keinen Spaß mit Dir!

        Liebe Grüße,

        Felix Riesterer.

        1. Hallo,

          So macht das keinen Spaß mit Dir!

          Als ob wir alle nur zum Spaß hier wären!

          Gruß
          Kalk

  2. Also führe ich eine Abfrage aus und lasse eine Schleife durchlaufen, die mir das Ergebnis in einer Variablen zusammenstellt. Doch wie bekomme ich dieses Ergebnis an die ajax Funktion wieder zurück?

    Als Response empfangen in der Callback-Funktion.

    Ich schreibe ja schon eine Variante, und zwar dass ich Echo reinschreibe und ja eigentlich die Werte zurückbekomme. Doch würde ich gerne wissen ob es denn nicht möglich wäre, irgendwie auch ohne den Inhalt der Datei zurückgeben zu lassen?

    Die Response kann auch als Datei aufgefasst werden: Sie ist immer eine Bytefolge.

    MfG

    1. @@pl

      Die Response kann auch als Datei aufgefasst werden: Sie ist immer eine Bytefolge.

      Und was will mir die Bytefolge 'F0 9F 92 A9' sagen?

      Kaum jemand interessiert sich für Bytes. Du meintest vermutlich: eine Zeichenfolge.

      LLAP 🖖

      --
      “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
      Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
      1. Und was will mir die Bytefolge 'F0 9F 92 A9' sagen?

      2. Hallo,

        Die Response kann auch als Datei aufgefasst werden: Sie ist immer eine Bytefolge.

        Und was will mir die Bytefolge 'F0 9F 92 A9' sagen?

        es ist die hexadezimale Darstellung der Anzahl der Bakterien an deiner linken Hand.

        Nein? Okay, dann hast du wohl einen wichtigen Punkt übersehen: Eine Information kann man speichern, übertragen, in andere Formen umwandeln und wieder zurückwandeln. Kein Problem. Aber die Bedeutung einer Information ergibt sich immer erst in einem Kontext. Und dabei ist es egal, ob diese Information als Bytefolge oder als Zeichenfolge beschrieben wird.

        Was will uns beispielsweise die Zeichenfolge BAG sagen?
        Nichts - oder sehr viel Unterschiedliches.

        Kaum jemand interessiert sich für Bytes. Du meintest vermutlich: eine Zeichenfolge.

        Das spielt keine Rolle. Entscheidend ist, welche Art Information das empfangende Script erwartet. Wenn es eine im weitesten Sinn textuelle oder textähnliche Information ist, mag der Begriff Zeichenfolge passender sein. Das muss aber nicht zwangsläufig so sein.

        So long,
         Martin

      3. @@pl

        Die Response kann auch als Datei aufgefasst werden: Sie ist immer eine Bytefolge.

        Und was will mir die Bytefolge 'F0 9F 92 A9' sagen?

        Kaum jemand interessiert sich für Bytes. Du meintest vermutlich: eine Zeichenfolge.

        In Sockets gibt es keine Zeichen. Hast Du das immer noch nicht verstanden!?

  3. Der Klassiker ist:

    Auf dem Server:

    Du startest die MySQL-Abfrage wie gewohnt und erzeugst einen Array ($data). Den wandelst Du mit json_encode($data) um und gibst ihn aus:

    header('Content-Type:text/plain, charset=utf-8');
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    

    Weitere Ausgaben (außer ggf. header) dürfen nicht stattfinden, sonst schlägt das nachfolgende fehl:

    Clientseitig:

       // "xml"Http-Request-Zeug
       if (xmlHttp.readyState == 4) {
           var data = JSON.parse(xmlHttp.responseText);
    

    und schon hast Du an der Stelle ein Javascript-Objekt welches so beschaffen ist wie Dein Array im PHP. Du kannst auch ein

    alert(xmlHttp.responseText);
    

    ausführen um die Antwort anzusehen. Hast Du in PHP etwas wie:

    $data['key']='value';
    

    dann bekommst Du in JS mit obigem:

    alert(data['key'])
    

    das Ergebnis: value

    Der andere Klassiker ist, Du erzeugst und sendest gleich gültiges HTML oder Text und baust das ein.

    <?php
    header('Content-Type:text/plain, charset=utf-8');
    echo 'Abgerufen/Gesendet um: ' . date('H:i:s');
    

    Clientseitig:

       // "xml"Http-Request-Zeug
       if (xmlHttp.readyState == 4) {
           document.getElementById('ausgabe').innerHTML = xmlHttp.responseText;
    
  4. ich will es einfach nicht schaffen

    Wenn du es nicht willst, kann dir keiner helfen, denn wollen musst du schon selbst. Falls du hingegen willst, es dir aber nicht gelingen will, wäre das natürlich etwas gänzlich anderes.

    SCNR :]