back

Knowledge Centre

Dynamische Formularfelder: Verwendung von AJAX zur automatischen Aktualisierung von HTML-Inhalten basierend auf der Benutzerauswahl

| 08.08.2019

Dynamische Formularfelder: Verwendung von AJAX zur automatischen Aktualisierung von HTML-Inhalten basierend auf der Benutzerauswahl

Haben Sie jemals ein Formularfeld automatisch aktualisieren müssen, basierend auf dem Wert eines anderen? Zum Beispiel, ein Land auswählen und das Dropdown-Menü für Bundesländer/Provinzen wird automatisch gefüllt? In diesem Tutorial zeigen wir Ihnen, wie Sie diese gängige Funktion mit AJAX implementieren können.

Nehmen wir an, wir haben ein Produkt-Auswahlformular, bei dem die Auswahl eines Produkts automatisch das Preisfeld aktualisieren sollte. Traditionell würde dies einen vollständigen Seiten-Reload erfordern, aber mit AJAX können wir es reibungslos und nahtlos gestalten.

Zunächst erstellen wir unsere grundlegende Formularstruktur:

<form id="productForm">
   <div class="form-group">
       <label for="productSelect">Produkt auswählen:</label>
       <select id="productSelect" name="product">
           <option value="">Wählen Sie ein Produkt...</option>
           <option value="1">Premium Widget</option>
           <option value="2">Basic Widget</option>
           <option value="3">Super Widget</option>
       </select>
   </div>
   
   <div class="form-group">
       <label for="priceField">Preis:</label>
       <input type="text" id="priceField" name="price" readonly>
   </div>
</form>

So werden wir das AJAX-Update durchführen:

document.addEventListener('DOMContentLoaded', function() {
   const productSelect = document.getElementById('productSelect');
   const priceField = document.getElementById('priceField');
   
   productSelect.addEventListener('change', function() {
       const selectedProduct = this.value;
       
       if (!selectedProduct) {
           priceField.value = '';
           return;
       }
       
       // Die AJAX-Anfrage durchführen
       fetch('/api/get-price', {
           method: 'POST',
           headers: {
               'Content-Type': 'application/json',
           },
           body: JSON.stringify({
               productId: selectedProduct
           })
       })
       .then(response => response.json())
       .then(data => {
           priceField.value = data.price;
       })
       .catch(error => {
           console.error('Fehler beim Abrufen des Preises:', error);
           priceField.value = 'Fehler beim Laden des Preises';
       });
   });
});

Hier ist ein Beispiel, wie der serverseitige Handler in PHP aussehen könnte:

<?php
header('Content-Type: application/json');
// Die POST-Daten abrufen
$data = json_decode(file_get_contents('php://input'), true);
$productId = $data['productId'];
// In einer echten Anwendung würden Sie dies aus einer Datenbank abrufen
$prices = [
   1 => 99.99,
   2 => 49.99,
   3 => 149.99
];
$response = [
   'price' => isset($prices[$productId]) ? $prices[$productId] : null
];
echo json_encode($response);
?>

 

Wir haben eine ordnungsgemäße Fehlerbehandlung sowohl auf der Client- als auch auf der Serverseite implementiert. Das Preisfeld zeigt Ladezustände und Fehlermeldungen an, wenn dies angemessen ist. Das Formular funktioniert auch ohne JavaScript, obwohl ein Seiten-Reload erforderlich wäre. Der Server validiert die Produkt-ID, bevor er einen Preis zurückgibt.

Beachten Sie bei der Implementierung dieser Funktion folgende Sicherheitsaspekte:

  • Validieren Sie immer die Benutzereingaben sowohl auf der Client- als auch auf der Serverseite
  • Verwenden Sie CSRF-Token für POST-Anfragen
  • Bereinigen Sie Daten, bevor Sie sie dem Benutzer zurückgeben
  • Implementieren Sie ordnungsgemäße Zugriffskontrollen auf dem API-Endpunkt

Um Ihre AJAX-Updates noch effizienter zu gestalten:

  • Drosseln Sie die AJAX-Anfragen, wenn das Feld schnell geändert werden kann
  • Speichern Sie Antworten für häufig angeforderte Werte im Cache
  • Überlegen Sie, ob Sie einen Ladeindikator für langsamere Verbindungen verwenden möchten

Der oben stehende Code verwendet die Fetch-API, die in allen modernen Browsern funktioniert. Für ältere Browser möchten Sie vielleicht ein Polyfill verwenden oder auf XMLHttpRequest umsteigen:

function makeRequest(url, data, callback) {
   const xhr = new XMLHttpRequest();
   xhr.open('POST', url, true);
   xhr.setRequestHeader('Content-Type', 'application/json');
   
   xhr.onreadystatechange = function() {
       if (xhr.readyState === 4) {
           if (xhr.status === 200) {
               callback(null, JSON.parse(xhr.responseText));
           } else {
               callback(new Error('Anfrage fehlgeschlagen'));
           }
       }
   };
   
   xhr.send(JSON.stringify(data));
}

Das dynamische Aktualisieren von Formularfeldern mit AJAX schafft ein reibungsloseres Benutzererlebnis und reduziert die Serverlast, indem unnötige Seiten-Reloads vermieden werden. Indem Sie die oben beschriebenen Muster und Best Practices befolgen, können Sie diese Funktion auf robuste und wartbare Weise implementieren.

Vergessen Sie nicht, gründlich in verschiedenen Browsern und Netzwerkbedingungen zu testen, und priorisieren Sie immer das Benutzererlebnis, indem Sie angemessenes Feedback während der Lade- und Fehlerzustände geben.

  • Wissen
    Wissenszentrum
    Im Gehirn einer KI
  • Wissen
    Wissenszentrum
    Feinabstimmung von LLaMA zur Nachbildung von Eminescus literarischem Stil
  • Wissen
    Wissenszentrum
    Ein neues Zeitalter beginnt: Drupal CMS 1.0 startet