[jQuery AJAX] echo mit HTML Content von PHP Datei ausgeben?
Okay, die Frage ist evtl ein bisschen kompliziert. Deshalb beschreibe ich das anhand eines Beispiels. Zuerst meine Dateien:
PHP (submit.php)
<?php
$mail = $_GET['mail']; if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { echo "<div role=\"alert\">Ungültige E-Mail</div>"; } else { echo "<div role=\"alert\">Gültige E-Mail</div>"; }
?>
HTML (index.html)
<form id="myForm">
<input type="email" name="mail" id="mail" placeholder="E-Mail Adresse"/>
<input type="submit" name="check" id="check" value="Senden"/>
</form>
<script src="http://code.jquery.com/jquery-1.9.1.js"/> <script> $(function () { $('form').on('submit', function (e) { e.preventDefault(); $.ajax({ type: 'post', url: 'submit.php', data: $('form').serialize(), success: function() { //echo "Gültige E-Mail } error: function() { //echo "Ungültige E-Mail" } }); }); }); </script>
Beschreibung:
Sobald das Formular abgesendet wurde, wird die E-Mail an die submit.php gesendet. In dieser wird überprüft, ob die E-Mail gültig ist und gibt dann das Ergebnis in Form von HTML-Code zurück.
Die Lösung mit alert will ich nicht. Es soll unterhalb der Form das Ergebnis stehen.
Wenn ich mit PHP
echo "<div role=\"alert\">Gültige E-Mail</div>";
ausgebe, dann steht das auch direkt in HTML dort (also nicht als PlainText).
Wie ist es also möglich, das Ergebnis der submit.php zu bekommen und in der index.html auszugeben?
Vielen Dank im Voraus!
4 Antworten
Indem du das div, was du in dem submit.php anzeigst gleich renderst ohne textuellen Inhalt und dann in der success Methode des Ajax-Calls den innerText des Elements änderst. Dazu sollte das natürlich auch eine Id haben, damit du es ansprechen kannst.
Wenn nicht immer etwas ausgegeben werden soll und nur im Fehlerfall, dann kannst du natürlich auch das Element dynamisch erstellen via createElement. Ein leeres Element mit einem hat dann aber den Vorteil, dass das Layout nicht umgebrochen wird bzw. die Meldung den vorhandenen Content nach unten schiebt.
Indem du das div, was du in dem submit.php anzeigst gleich renderst ohne textuellen Inhalt
<form id="myForm">
<input type="email" name="mail" id="mail" placeholder="E-Mail Adresse"/>
<input type="submit" name="check" id="check" value="Senden"/>
</form>
<div role="alert" id="form-message"> </div>
und dann in der success Methode des Ajax-Calls den innerText des Elements änderst.
success: function(data) {
document.getElementById('form-message').innerText = data;
}
In der submit.php gibst du dann nicht mehr das div mit aus, sondern nur den gewünschten Text.
Alternativ kannst du das auch über HTTP Codes abbilden und dann ohne zurückgegebene Daten in der success oder error Funktion abbilden. Finde es aber so korrekter, da der Request ja funktioniert hat.
Okay, eine andere Frage... Wenn ich das so wie Du geschrieben hast, mache, dann würde das standardmäßig auf meiner Seite so aussehen: https://prnt.sc/pu5p8w
Und nach dem Senden so: https://prnt.sc/pu5puq
Gibt es da die Möglichkeit, die Box erst dann sichtbar zu machen, nachdem der Text angezeigt wird?
Das Element wäre:
<div class="alert alert-warning" role="alert" id="warning-message"> </div>
Btw. Deine Lösung funktioniert! :)
In dieser wird überprüft, ob die E-Mail gültig ist
Mach das doch mit
<input type=email ...>
Alex
Hallo Alex,
danke für deine Antwort. Diese Lösung ist leider nicht das, was ich brauche. Klar, das wird dann seitens HTML überprüft, aber es gibt auch Entwickler, die die Page Source bearbeiten und aus type="email" ein type="text" machen. Deshalb soll das ganze per PHP überprüft werden, was dann der Anwender nicht ändern kann, weil das ja serverseitig ist.
Das eigentliche Problem war ja jQuery AJAX. Die Lösung ist in einem Kommentar unter dem Beitrag von apachy.
Trotzdem danke!
Klar, das wird dann seitens HTML überprüft, aber es gibt auch Entwickler, die die Page Source bearbeiten und aus type="email" ein type="text" machen.
Ja und? Diese "Entwickler", die vorsätzlich eine falsche Mail-Adresse eingegeben habe, wundern sich dann aber auch nicht, wenn sie keine Bestätigungs-Mail, keine Login-Daten, keinen Newsletter oder dgl. erhalten.
Ist aber okay, wenn Du dennoch daran festhältst.
Für andere Leser jedoch der Hinweis: Es ist stets ausgemachter Unsinn, eine eingegebene Mail-Adresse serverseitig (mit Rückgabe) syntaktisch zu validieren, da in diesem Fall mehrere unnötige Requests gesendet werden, was die ganze Anwednung unnötig verlangsamt. Wenn man überhaupt eine serverseitige Validierung einsetzt, dann nur so, dass diese nach dem Absenden des Formulares das gesamte ('ausgefüllte) Formular wieder aufruft. AJAX so aunzuwenden wie im o. g. Beispiel ist hier aber stets die falsche Lösung.
Ich würde das ganze ohne PHP machen. Du kannst die Email per JS evaluieren und das Formular nur dann abschicken, wenn die Felder gültig sind.
Da der Code von der HTML Datei nicht so übersichtlich aussieht, hier das ganze via Hastebin: https://hastebin.com/owidabides.xml
Hmm.. Okay. Könntest Du das anhand eines Codes zeigen?
MfG