Variable aus javascript an php übergeben

Andre Lieske

Grünschnabel
Hallo Profis,
habe versucht das Script von Sempervivum nach meinen ervordernissen anzupassen, leider ohne Erfolg.
Der obere Teil funktioniert.
Mein angepasstest Script:
Code:
<script type="text/javascript">
            <!--
            var sBestellSumme = new cSMPrice();
            sBestellSumme.decode(SMShop.basket.getAttribute(_SMAFinalSum));
            var sBestelldaten = ''
              + 'Firma: ' + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + '<br>'
                + 'Titel: ' + SMShop.getFormValue("BILLTO", "BILLTO_TITLE") + '<br>'
                + 'Email: ' + SMShop.getFormValue("BILLTO", "BILLTO_EMAIL") + '<br>'
                + 'Vorname: ' + SMShop.getFormValue("BILLTO", "BILLTO_FIRSTNAME") +
'<br>'
                + 'Nachname: ' + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME") +
'<br>'
                + 'Strasse:  ' + SMShop.getFormValue("BILLTO", "BILLTO_STREET_1") +
'<br>'
                + 'PLZ: ' + SMShop.getFormValue("BILLTO", "BILLTO_POSTCODE") + '<br>'
                + 'Stadt: ' + SMShop.getFormValue("BILLTO", "BILLTO_CITY") + '<br>'
                + 'Land: ' + SMShop.getFormValue("BILLTO", "BILLTO_COUNTRY") + '<br>'
                + 'Telefon: ' + SMShop.getFormValue("BILLTO", "BILLTO_PHONE_NUMBER") +
'<br>'
                + 'Fax: ' + SMShop.getFormValue("BILLTO", "BILLTO_FAX_NUMBER") + '<br>'
                + 'Summe: ' + cprimary.format(sBestellSumme.gross, SM_CNOFORMAT) +
'<br>'
                + 'Bestellnummer: ' + SMShop.getAttribute(_SMAMailOrderID) + '<br>';
                document.write(sBestelldaten);
                //-->
            </script>
           
                <script>

        var data = "firma=" + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + "&nachname=" + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME");
        var xhr = new XMLHttpRequest();
        var url = "brokerdatei/testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                ausgabe1.innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    </script>
   
   


<?PHP
echo 'includierte testpost.php<br>';
include $_SERVER['DOCUMENT_ROOT']."/brokerdatei/testpost.php";
?>

So sieht die testpost.php aus:
Code:
<?php

        foreach ($_POST as $key => $value) {
            echo $key . ": " . $value . " ";
       }

echo 'Firma: ' . $_POST["firma"] . '<br>' . 'Nachname: ' . $_POST["nachname"];
?>

Was mache ich falsch?
Besten Dank im voraus
Gruss André
 

Sempervivum

Erfahrenes Mitglied
Mögliche Gründe, warum es nicht funktioniert:
Du includierst am Ende die Datei testpost.php. Dort sind aber die POST-Variablen nicht gesetzt, d. h. das Skript wird hier keine Ausgabe liefern. Gesetzt werden sie beim Ajax-Request und Du bekommst die Ausgabe des Skripts in dessen Callback, hier:
Code:
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                ausgabe1.innerHTML = xhr.responseText;
            }
        };
Die Ausgabe steht in xhr.responseText und sie wird in das HTML-Element ausgabe1 eingetragen. Hast Du dieses Element überhaupt definiert?
 

Sempervivum

Erfahrenes Mitglied
HTML:
Code:
<span id="ausgabe1"></span>
dort einfügen, wo die Ausgabe angezeigt werden soll. Und das Javascript so ändern:
Code:
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
 

Andre Lieske

Grünschnabel
Hallo,
so sieht das Script jetzt aus, eine Ausgabe erfolgt nicht.
Brauche ich das include?
Code:
<script type="text/javascript">
            <!--
            var sBestellSumme = new cSMPrice();
            sBestellSumme.decode(SMShop.basket.getAttribute(_SMAFinalSum));
            var sBestelldaten = ''
              + 'Firma: ' + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + '<br>'
                + 'Titel: ' + SMShop.getFormValue("BILLTO", "BILLTO_TITLE") + '<br>'
                + 'Email: ' + SMShop.getFormValue("BILLTO", "BILLTO_EMAIL") + '<br>'
                + 'Vorname: ' + SMShop.getFormValue("BILLTO", "BILLTO_FIRSTNAME") +
'<br>'
                + 'Nachname: ' + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME") +
'<br>'
                + 'Strasse:  ' + SMShop.getFormValue("BILLTO", "BILLTO_STREET_1") +
'<br>'
                + 'PLZ: ' + SMShop.getFormValue("BILLTO", "BILLTO_POSTCODE") + '<br>'
                + 'Stadt: ' + SMShop.getFormValue("BILLTO", "BILLTO_CITY") + '<br>'
                + 'Land: ' + SMShop.getFormValue("BILLTO", "BILLTO_COUNTRY") + '<br>'
                + 'Telefon: ' + SMShop.getFormValue("BILLTO", "BILLTO_PHONE_NUMBER") +
'<br>'
                + 'Fax: ' + SMShop.getFormValue("BILLTO", "BILLTO_FAX_NUMBER") + '<br>'
                + 'Summe: ' + cprimary.format(sBestellSumme.gross, SM_CNOFORMAT) +
'<br>'
                + 'Bestellnummer: ' + SMShop.getAttribute(_SMAMailOrderID) + '<br>';
                document.write(sBestelldaten);
                //-->
            </script>
           
                <script>

        var data = "firma=" + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + "&nachname=" + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME");
        var xhr = new XMLHttpRequest();
        var url = "brokerdatei/testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
               xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    </script>
   
   


<span id="ausgabe1"></span>
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Stelle die Definition von #ausgabe1 vor das Skript. Du hast zwar eingestellt, dass es asynchron arbeitet, aber wenn Du lokal testest, kann die Antwort eintreffen, bevor das Element definiert ist.
 

Andre Lieske

Grünschnabel
Wie komme ich jetzt per PHP an die Daten?
Es kommt keine Ausgabe

Code:
<script type="text/javascript">
            <!--
            var sBestellSumme = new cSMPrice();
            sBestellSumme.decode(SMShop.basket.getAttribute(_SMAFinalSum));
            var sBestelldaten = ''
              + 'Firma: ' + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + '<br>'
                + 'Titel: ' + SMShop.getFormValue("BILLTO", "BILLTO_TITLE") + '<br>'
                + 'Email: ' + SMShop.getFormValue("BILLTO", "BILLTO_EMAIL") + '<br>'
                + 'Vorname: ' + SMShop.getFormValue("BILLTO", "BILLTO_FIRSTNAME") +
'<br>'
                + 'Nachname: ' + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME") +
'<br>'
                + 'Strasse:  ' + SMShop.getFormValue("BILLTO", "BILLTO_STREET_1") +
'<br>'
                + 'PLZ: ' + SMShop.getFormValue("BILLTO", "BILLTO_POSTCODE") + '<br>'
                + 'Stadt: ' + SMShop.getFormValue("BILLTO", "BILLTO_CITY") + '<br>'
                + 'Land: ' + SMShop.getFormValue("BILLTO", "BILLTO_COUNTRY") + '<br>'
                + 'Telefon: ' + SMShop.getFormValue("BILLTO", "BILLTO_PHONE_NUMBER") +
'<br>'
                + 'Fax: ' + SMShop.getFormValue("BILLTO", "BILLTO_FAX_NUMBER") + '<br>'
                + 'Summe: ' + cprimary.format(sBestellSumme.gross, SM_CNOFORMAT) +
'<br>'
                + 'Bestellnummer: ' + SMShop.getAttribute(_SMAMailOrderID) + '<br>';
                document.write(sBestelldaten);
                //-->
            </script>
    <span id="ausgabe1"></span>       
                <script>

        var data = "firma=" + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + "&nachname=" + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME");
        var xhr = new XMLHttpRequest();
        var url = "brokerdatei/testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
               xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    </script>
 

Sempervivum

Erfahrenes Mitglied
Wie komme ich jetzt per PHP an die Daten?
Kurz zusammen gefasst: Mit Ajax rufst Du dein PHP-Skript auf dem Server auf und übergibst ihm die Parameter:
Code:
xhr.send(data);
Ist das Skript fertig, so triggert das Event onreadystatechange und die Funktion dort wird aufgerufen; die Ausgabe des Skripts steht dann in xhr.responseText zur Verfügung:
Code:
    xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        }
Ajax und PHP brauchen jedoch einen Webserver. Ich vermute, dass Du lokal testet und diesen nicht hast. Lade beides hoch auf deinen Webspace und schau ob es dann funktioniert.