Hvis du vil bygge en Ferrari, bør du begynde at lære en hel masse om mekanik, længe før du vil påbegynde bygningen   ;o)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Ajax Eksempel - 
http://www.eksperten.dk/spm/888717</title><script type="text/javascript">
// XMLHttpRequest wrapper: 
http://dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.phpvar sAX="MSXML2.XMLHTTP.6.0 MSXML2.XMLHTTP.3.0 Msxml2.XMLHTTP Microsoft.XMLHTTP";
(function(){var x=window.XMLHttpRequest;if(!x){var o=s=null,a=sAX.split(" ");for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}}window.XMLHttpRequest=x?x:o?function(){return new ActiveXObject(s)}:null;o=null;sAX=undefined})();
// Ajax funktion
function myAjaxRequest(sUrl, oVars, fnHandler) {
    var oHttp = new XMLHttpRequest();
    oHttp.open("post", sUrl, true);
    oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = function(){
        if (oHttp.readyState<4) return;
        fnHandler(oHttp.responseText);
        oHttp = null;
    };
    var x, sQ, aQuery = [];
    for (x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    sQ = aQuery.length>0 ? aQuery.join("&") : null;
    oHttp.send(sQ);    
}
function getUsers() {
    // Tøm TBODY'en, hvis der er rækker i den
    while (oDispl.firstChild) oDispl.removeChild(oDispl.firstChild);    
    // Opret en variabel, som serverscriptet kan genkende
    // og bruge til at vælge at gøre det ønskede
    var oVars = {"contxt": "getUsers"};    
    // Send en Ajax request
    myAjaxRequest("response.php", oVars, fillDisplay);
}
// Callback funktion, som fylder rækker i TBODY'en
function fillDisplay(sResponse) {
    // Opret et JS-object udfra JSON-strengen fra serveren
    var oResp = eval("(" + sResponse + ")");    
    // Udfør handlinger ved evt. fejl
    if (!oResp) return alert("Some unforeseen shit hit the fan!");
    if (oResp.error) return alert(oResp.error);    
    // Indsæt data med DOM
    var oClone = aTD = null, oFrag = document.createDocumentFragment();
    for (var i=0,j=oResp.rows.length; i<j; i++) {
        oClone = oTempl.cloneNode(true);
        oClone.setAttribute("userID", oResp.rows[i].id);
        aTD = oClone.getElementsByTagName("td");
        aTD[0].firstChild.nodeValue = oResp.rows[i].u_name;
        aTD[1].firstChild.nodeValue = oResp.rows[i].u_sex;
        aTD[2].firstChild.nodeValue = oResp.rows[i].u_birth;
        oClone.style.background = i%2==0 ? "#fff" : "#f0f0f0";
        oFrag.appendChild(oClone);
    }
    oDispl.appendChild(oFrag);
    oResp = null;
}
// Testfunktion, som alert'er et eller andet ved rækken
function rowClick(oTR) {
    alert(oTR.getAttribute("userID"))
}
var oDispl = oTempl = null;
window.onload = function(){
    oDispl = document.getElementById("userDisplay");
    oTempl = oDispl.getElementsByTagName("tr")[0];
    oDispl.removeChild(oTempl);
}
</script>
</head>
<body>
<p><button onclick="getUsers()">Hent brugere</button></p>
<table>
<thead>
<tr>
    <th>Navn</th>
    <th>Køn</th>
    <th>Fødeår</th>
</tr>
</thead>
<tbody id="userDisplay">
<tr onclick="rowClick(this)">
    <td> </td>
    <td> </td>
    <td> </td>
</tr>
</tbody>
</table>
</body>
</html>
Det er dog stadig temmelig urealistisk at ville bruge Ajax uden at kunne JavaScript ... uanset, hvor lille en ting man vil bruge det til   =)