Hola, quiero procesar todo un formulario vía Ajax, hasta ahora lo que hacía era que al instante comprobaba si el valor introducido era correcto o no, usaba onkeydown y utilizaba este método:
function comprobar(url, objeto) {
var parametros = objeto.id + "=" + objeto.value;
// crea un objeto XMLHttpRequest
var miObj = null;
if (window.XMLHttpRequest) {
// Gestión de Ajax con Mozilla Firefox y otros navegadores
miObj = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// Gestión de Ajax con Internet Explorer
miObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
// El objeto XMLHttpRequest no se puede gestionar en este navegador
alert("El navegador no admite el uso de Ajax");
return;
}
miObj.open("POST", url, true);
miObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
miObj.setRequestHeader("Content-length", parametros.length);
miObj.setRequestHeader("Connection", "close");
miObj.send(parametros);
// Gestión de una llamada asincrónica que NO bloquea la ejecución hasta que se recibe la respuesta
miObj.onreadystatechange = function() {
if (miObj.readyState < 4 && miObj.status == 200) {
document.getElementById("respuesta_usuario").innerHTML = '<img src="images/register/preloader.gif" width="16" height="16" />Validando...';
}
if (miObj.readyState == 4 && miObj.status == 200) {
// Asignación de datos a un elemento en pantalla
if(miObj.responseText=="Usuario Disponible"){
document.write("Todo ok");
}
else {
document.write("Algo mal");
}
}
}
}
Pero como se puede observar, este código sólo envia un parámetro. Bien he estado probando como podría mandar todos los parámetros de una vez y me ha salido esto:
function comprobar() {
name = document.getElementById("name");
email = document.getElementById("email");
motivo = document.getElementById("motivo");
comentario = document.getElementById("comentario");
parametros_name = name.id + "=" + name.value;
parametros_email = email.id + "=" + email.value;
parametros_motivo = motivo.id + "=" + motivo.value;
parametros_comentario = comentario.id + "=" + comentario.value;
// crea un objeto XMLHttpRequest
var miObj = null;
if (window.XMLHttpRequest) {
// Gestión de Ajax con Mozilla Firefox y otros navegadores
miObj = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// Gestión de Ajax con Internet Explorer
miObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
// El objeto XMLHttpRequest no se puede gestionar en este navegador
alert("El navegador no admite el uso de Ajax");
return;
}
miObj.open("POST", "comprobar.php", true);
miObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
miObj.setRequestHeader("Content-length", parametros_name.length);
miObj.setRequestHeader("Content-length", parametros_email.length);
miObj.setRequestHeader("Content-length", parametros_motivo.length);
miObj.setRequestHeader("Content-length", parametros_comentario.length);
miObj.setRequestHeader("Connection", "close");
miObj.send(parametros_name);
miObj.send(parametros_email);
miObj.send(parametros_motivo);
miObj.send(parametros_comentario);
// Gestión de una llamada asincrónica que NO bloquea la ejecución hasta que se recibe la respuesta
miObj.onreadystatechange = function() {
if (miObj.readyState == 4 && miObj.status == 200) {
// Asignación de datos a un elemento en pantalla
if(miObj.responseText=="todok"){
document.getElementById("contacto").style.visibility = "visible";
}
else {
document.getElementById("respuesta_usuario").className = "texto_nok";
document.getElementById("respuesta_usuario").innerHTML = miObj.responseText;
}
}
}
}
El onclick esta vez lo ponía en el botón de enviar, y he echo varios alerts haber si recoge los datos y los recoge como [ObjectHTMLInputElement], y la verdad no se porqué. ¿Cómo a partir del código que recoge un valor podría enviar todo el formulario a la vez?
Gracias 
1.- No es bueno usar AJAX con onkeydown porque matarías al servidor si tu web llega a ser popular
2.- Usa javascript para comprobar longitud, formato, etc... de los datos. Luego, al enviar los datos del formulario, los compruebas con PHP
3.- Si quieres comprobar valores como por ejemplo la disponibilidad de un nick / email, hazlo con onblur, porque no tiene sentido comprobar letra por letra el dato, porque sería una consulta cada vez que escribes una letra... con eso te hacen un DDoS que no puedes con el
4.- Te recomiendo usar jQuery, porque para solucionar tu problema harías esto:
$.post('url', 'parametro1='+parametro1+'¶metro2=...', function(respuesta){ if(respuesta == 'todok'){ algo; }else{ otro; } })
Te ahorrarías todo ese código, además de que te funcionaría sin problemas
