Im letzten Blog-Beitrag wurde vorgestellt, wie eine Microsoft Azure Function erstellt wird, die zum Senden von Emails genutzt werden kann. Die Function erwartet dabei einen HTTP-PUT-Aufruf mit angehängten Daten im JSON-Format. Wie Sie aus einem normalen HTML-Formular mit einigen Zeilen JavaScript und Jquery einen solchen JSON-Aufruf erzeugen, erfahren Sie in diesem Beitrag.
Das Formular
Zunächst benötigen wir ein einfaches Web-Formular:
<form id="myForm"> <input type="hidden" name="toEmail" value="max.mustermann@empfaenger.de"/> <input type="hidden" name="isImportant" value="false"/> <label for="color">Absender-Email</label><br/> <input id="fromEmail" type="text" name="fromEmail" value="a@bc.de" /> <br/> <label for="code">Betreff</label><br/> <input id="subject" type="text" name="subject" value="Betreff" /> <br/> <textarea name="message" class="textarea" cols="25" rows="5"></textarea> <br> <input id="mySubmitButton" type="submit" value="submit" /> </form>
Das Script
Anschließend werden die Daten über JavaScript aufbereitet und versendet:
$('#mySubmitButton').on('click', function() {
$.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
data: $('#myForm').serialize(),
type: 'GET',
url: 'receiver.php'
}).done(function(data, textStatus, jqXHR) {
console.log('Data sent.');
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log('There was an error.');
});
return false;
});
Die Funktion serialize sorgt dafür, dass alle Formularfelder (die über ein name-Attribut verfügen) in einer Zeichenkette zusammengefasst werden.
Kurzschreibweise: $.get
Anstatt des Aufrufs von $.ajax kann auch folgende Kurzschreibweise verwendet werden:
$('#mySubmitButton').on('click', function() {
$.get('receiver.php', $('#myForm').serialize())
.done(function() {
console.log('Data sent.');
})
.fail(function() {
console.log('There was an error.');
});
return false;
});
Daten in JSON übermitteln
Möchte man Daten im JSON-Format übertragen, so ist der Einsatz von serialize nicht ausreichend, da bei diesem Funktionsaufruf nur eine Parameter-Zeichenkette entsteht und keine Objekt-Notation. Die Formulareingaben müssen daher vorher in ein JavaScript-Objekt umgewandelt werden:
$('#mySubmitButton').on('click', function() {
var object = {};
// Put form inputs into an array
var array = $('#myForm').serializeArray();
// Make an object out of the array
$.each(array, function(index, item) {
object[item.name] = item.value;
});
$.ajax({
contentType: 'application/json; charset=UTF-8',
dataType: 'json',
data: JSON.stringify(object),
type: 'POST',
url: 'receiver.php'
}).done(function(data, textStatus, jqXHR) {
console.log('Data sent.');
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log('There was an error.');
});
return false;
});
Mit der jQuery-Funktion serializeArray wird zuerst ein Feld aus den Formulareingaben erzeugt. Anschließend wird aus diesem Feld ein JavaScript-Objekt gebildet, welches dann mit der vom Browser zur Verfügung gestellten Funktion JSON.stringify in JSON umgewandelt wird. Für den Versand wurde außerdem der dataType und der contentType des $.ajax-Aufrufs geändert. Weil die JSON viele Sonderzeichen enthält empfiehlt es sich die Methode zum Senden von GET auf POST umzustellen.
Um das Script mit der Azure-Functions-App zu verwenden, wird nur hinter url der entsprechende Funktionsaufruf (aus der Azure-App, mit Authentification-Code) eingefügt.