Hola maycolalvarez y foreros.
Les agradezco si me ayudan con una duda de Ajax. De Ajax, no soy experto.
Ya realicé la comprobación mediante Ajax. Es decir, por medio de Ajax, envió las dos variables que usa el Recaptcha [Recaptcha.get_response() y Recaptcha.get_challenge() ] y ya puedo saber si el usuario digitó bien ó mal las palabras. El Recaptcha se valida en el Server y devuelve por medio de Ajax la respuesta de bien ó mal. El resultado bien ó mal lo asigno a una variable Javascript. Con esta variable que digamos que se llame resultado, es la que indica si la ejecución del Form sigue ó se detiene para se digite de nuevo las palabras del Recaptcha.
Te comento que antes de que se ocurriera usar Recaptcha, yo ya estaba usando Ajax para enviar los campos de Formulario y mostrar un mensaje de "Enviando Datos....".
Ahora con el Recaptcha tuve que agregar otra función de Ajax para conectar con un archivo PHP. Les voy agregar el código:
Código Javascript
:
Ver originalfunction send_form_data()
{
// Usos 2 ajaxobj.open.
// 1. Para averiguar el resultado del Recaptcha
// 2. Para enviar el formulario.
//resp_captcha=Recaptcha.get_challenge();
nocache = Math.random();// Set te random number to add to URL request
//1. Averiguar el resultado del Recaptcha
var param = "recaptcha_challenge_field="+Recaptcha.get_challenge()+"&recaptcha_response_field="+Recaptcha.get_response()+"&resp_captcha="+resp_captcha;
var ruta_recaptcha="recaptcha_respuesta.php";// Aqui valido el Recaptcha y me indica si la respuesta es satisfactoria ó no se escribió bien.
var url_proc_form = ruta_recaptcha+'?nocache='+nocache;
ajaxobj.open('POST',url_proc_form,true);
ajaxobj.onreadystatechange=function(){
if(ajaxobj.readyState==4)
{
window.respuesta=ajaxobj.responseText;
}
}
ajaxobj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
ajaxobj.send(param);// Con POST paso variables y con GET pongo NULL
//Hasta aqui termina el código para saber el resultado del Recaptcha
Y aqui empiezo con el segundo "ajaxobj.open('POST',url_proc_form,true);" para enviar los datos en la misma funcion " send_form_data()".
Código Javascript
:
Ver original// Aquí empiezo validar todo el Formulario y que esté muy bien.
//Aqui uso el segundo 'ajaxobj.open()'
//Empiezo a validar cada campo del Form.
if(document.getElementById('campo1').value == "")
{
//acciones, no continua la ejecución del Formulario
}
else
if(document.getElementById('campo1').value == "")
{
//acciones, no continua la ejecución del Formulario
}
else
//
if(typeof(window.respuesta) == "undefined" || window.respuesta == 'Error, please try again.')
{
//acciones, no continua la ejecución del Formulario
Recaptcha.reload();
}
else
{ // Se envia el formulario, Segunda conexión de Ajax.
var campo1 = encodeURI(document.getElementById('campo1').value);
var campo2 = encodeURI(document.getElementById('campo2').value);
nocache = Math.random();// Set te random number to add to URL request
// Paso var con POST
var param = 'campo1='+campo1+'&campo2='+campo2;
var url_proc_form = "contact_form.php"; //Donde se envia x correo el form
ajaxobj.open('POST',url_proc_form,true);
ajaxobj.onreadystatechange=procesando_datos_msje;
ajaxobj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
ajaxobj.send(param);
}
if(error_form_field[0]!=""){// si hay error en el form, muestra msje de error
mostrar_msje_error(error_form_field); }
}
Si utilizo dos veces este código en una misma función,.. debo cerrar las conexiones para que no se afecten los resultados entre ellos? ó existe alguna otra recomendación ?
Código Javascript
:
Ver originalajaxobj.open('POST',url_proc_form,true);
ajaxobj.onreadystatechange=procesando_datos_msje;
ajaxobj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
ajaxobj.send(param);
Gracias.