LU04c - Formulardaten verarbeiten

Beim Speichern von Benutzereingaben muss der View-Controller die Formulardaten an den entsprechenden Service senden. Dazu müssen wir beim fetch-Befehl ein paar zusätzliche Parameter mitgeben.

person.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <head>
      <meta charset="UTF-8">
      <meta name="author" content="Marcel Suter"/>
      <meta name="copyright" content="Marcel Suter - BZZ"/>
      <meta name="project" content="Simple Ajax"/>
      <meta name="description" content="AJAX JSON Datei"/>
      <title>Persondaten speichern</title>
      <script src="./savePerson.js"></script>
    </head>
 
  </head>
  <body>
    <h2>Person</h2>
    <form id="personForm">
      <table>
        <tr>
          <td><label for="firstname">Vorname</label></td>
          <td><input id="firstname" type="text"/></td>
        </tr>
        <tr>
          <td><label for="lastname">Nachname</label></td>
          <td><input id="lastname" type="text"/></td>
        </tr>
        <tr>
          <td><label for="age">Alter</label></td>
          <td><input id="age" type="text"/></td>
        </tr>
        <tr>
          <td><label for="hobbies">Hobbys</label></td>
          <td><input id="hobbies" type="text"/></td>
        </tr>
        <tr>
          <td>
            <button type="submit">Speichern</button>
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>
Hinweise
  • Die Eingabefelder müssen in einem <form>…</form>-Element eingebettet sein.
  • Das Speichern erfolgt über den <button type=“submit”>.

savePerson.js

document.addEventListener("DOMContentLoaded", () => {
  // Listener for submit-event
  document.getElementById("personForm").addEventListener("submit", savePerson);
});
 
function savePerson(event) {
  // Don't let the browser send any request
  event.preventDefault();
 
  // get the form-element
  const personForm = document.getElementById("personForm");
  // create a FormData-object and add the data
  const formData = new FormData(personForm);
  // create an URLSearchParam-object and add the formData
  const data = new URLSearchParams(formData);
 
  fetch ("./save",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: data
    })
    .then(function (response) {
      if (!response.ok) {
        console.log(response);
      } else return response;
    })
    .then()
    .catch(function (error) {
      console.log(error);
    });
}

Hinweise

  • Der Browser möchte beim “Submit”-Event selber einen Request absetzen. Dies müssen wir über event.preventDefault() verhindern.
  • Im fetch-Befehl müssen wir zusätzlich zur URL einige Parameter angeben:
    • method: Die HTTP-Methode für den Request (Default: GET)
    • headers: Hier geben wir an, wie die Daten codiert werden.
    • body: Die Formulardaten

Marcel Suter

  • modul/m321/learningunits/lu04/formular.txt
  • Last modified: 2024/02/06 09:03
  • by msuter