Analog dem obigen Beispiel kann das Interface-Element AJAX-Code in das Formular einführen; das Absetzen von AJAX-Requests sieht im Prinzip wie folgt aus: im Code-Beispiel werden über die serverseitige Methode ajaxValidatePlzOrt die neuen Anwender-Eingaben von Ort ('new_ORT'*) und PLZ ('new_PLZ') onchange verrechnet und ein Feedback in das Eingabe-Formular zurückgegeben.

var fm_form0 = document.forms['form0'];
var el_plz = fm_form0.elements['new_PLZ'];
var el_ort = fm_form0.elements['new_ORT'];

function el_plz_ort_Change(el) 
{
  document.getElementsByTagName('body')[0].style.cursor = "wait";
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  var url = "<dtml-var URL>/ajaxValidatePlzOrt?plz="+escape(el_plz.value)+"&ort="+escape(el_ort.value);
  req.open("GET",url,true);
  req.onreadystatechange = processResponseValidatePlzOrt;
  req.send(null);
}

function processResponseValidatePlzOrt() 
{
  if (req.readyState == 4 && req.status == 200) 
  {
    document.getElementsByTagName('body')[0].style.cursor = "auto";
    [...]
 }
}

// Event-Handler dynamisch anpassen
el_plz.onchange = function() { return el_plz_ort_Change(this) };
el_ort.onchange = function() { return el_plz_ort_Change(this) };

* Hinweis: das von ZMSQqldb automatische Darstellungsformular setzt dem Namen eines jeden Datenfeldes den prefix „new_“ voran; die Bestandsdaten sind allesamt in Hidden- Feldern gedoppelt (prefix für den Feldnamen: „old_“).