XMLHttpRequest para publicar formulario HTML

Configuración actual

Tengo un formulario HTML como tal.

<form id="demo-form" action="POST" method="post-handler.php">
   <input type="text" name="name" value="previousValue"/>
   <button type="submit" name="action" value="dosomething">Update</button>
</form>

Es posible que tenga muchos de estos formularios en una página.

Mi pregunta

¿Cómo envío este formulario de forma asíncrona y no me redirecciono o actualizo la página? Yo se como usarXMLHttpRequest. El problema que tengo es recuperar los datos del HTML en javascript para luego colocarlos en una cadena de solicitud posterior. Aquí está el método que estoy usando actualmente para mis zXMLHttpRequest`'s.

function getHttpRequest() {
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    return xmlhttp;
}

function demoRequest() {
       var request = getHttpRequest();
       request.onreadystatechange=function() {
             if (request.readyState == 4 && request.status == 200) {
                   console.log("Response Received");
             }
       }
       request.open("POST","post-handler.php",true);
       request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
       request.send("action=dosomething");
}

Así por ejemplo, digamos el método javascript.demoRequest() se llamó cuando se hizo clic en el botón de envío del formulario, ¿cómo accedo a los valores del formulario desde este método para luego agregarlo a laXMLHttpRequest?

EDITAR

Tratando de implementar una solución a partir de una respuesta a continuación, he modificado mi formulario como tal.

<form id="demo-form">
       <input type="text" name="name" value="previousValue"/>
       <button type="submit" name="action" value="dosomething" onClick="demoRequest()">Update</button>
</form>

Sin embargo, al hacer clic en el botón, todavía se está intentando redirigir (a donde no estoy seguro) y no se llama a mi método.

Botón de escucha de eventos

document.getElementById('updateBtn').addEventListener('click', function (evt) {
                                evt.preventDefault();

                                // Do something
                                updateProperties();

                                return false;
                            });

Respuestas a la pregunta(6)

Su respuesta a la pregunta