Validación formulario Ajax

Iniciado por gpinyol10, 6 Abril 2016, 10:57 AM

0 Miembros y 1 Visitante están viendo este tema.

gpinyol10

Hola, estoy haciendo una validación de formulario con Ajax y PHP pero no me funciona.

Yo tengo la siguiente función que la llamo en el formulario con onSubmit. El problema lo tengo que me llega antes al return false del final del todo cuadno aún no ha hecho la petición del ajax, entonces si la petición està correcta, como ya ha mandado false, no me manda el formulario. Pero las comprobaciones en el archivo php estan correctas y me devuelve bien, el problema es que la función validaForm devuelve false antes de esperarse a la respuesta del servidor.
Cómo puedo arreglarlo? Gracias

function validaForm(){
$('#Info1').html('<div style="display:none" class="Error"></div>');
$('#Info2').html('<div style="display:none" class="Error"></div>');
$('#Info3').html('<div style="display:none" class="Error"></div>');
$('#Info4').html('<div style="display:none" class="Error"></div>');
$('#Info5').html('<div style="display:none" class="Error"></div>');
$('#Info6').html('<div style="display:none" class="Error"></div>');
$('#Info7').html('<div style="display:none" class="Error"></div>');

var seleccion=($('input:radio[name=hayFide]:checked').val());
if (seleccion=='Tengo Fide Id') {
if($("#fide_id").val() == ""){
$('#Info1').html('<div class="Error">Campo obligatorio</div>');
$("#fide_id").focus();
return false;
} else if (isNaN($("#fide_id").val())){
$('#Info1').html('<div class="Error">Tiene que ser un valor numérico</div>');
$("#fide_id").focus();
return false;
} else {
var fide_id = $("#fide_id").val(); 
var dataString = 'fide_id='+fide_id+'&idioma='+language;
$.ajax({
type: "GET",
url: "../wp-content/themes/Divi/comprobarFormulario.php",
data: dataString,
success: function(data) {
$('#Info1').fadeIn(1000).html(data);
if (data=="") {
if (comprobar()) {
return true;
}
} else {
$("#fide_id").focus();
return false;
}
}
});
}
} else {
if (comprobar()) {
return true;
}
}

return false;
}

Gallu

Primero que nada intenta explicar mejor el problema ya que tu explicación no es muy clara.

Entiendo que lo que sucede es que en el onSubmit llamas a validarForm y que siempre te devuelve false. yo lo que haría es hacer el submit dependiente de la respuesta del ajax de comprobarFormulario.

Me gustaría saber qué hace el método comprobar

Fíjate en las modificaciones que agrego a continuación

Código (javascript) [Seleccionar]

function validaForm(){
$('#Info1').html('<div style="display:none" class="Error"></div>');
$('#Info2').html('<div style="display:none" class="Error"></div>');
$('#Info3').html('<div style="display:none" class="Error"></div>');
$('#Info4').html('<div style="display:none" class="Error"></div>');
$('#Info5').html('<div style="display:none" class="Error"></div>');
$('#Info6').html('<div style="display:none" class="Error"></div>');
$('#Info7').html('<div style="display:none" class="Error"></div>');

var seleccion=($('input:radio[name=hayFide]:checked').val());

if (seleccion=='Tengo Fide Id') {
  if($("#fide_id").val() == ""){
   $('#Info1').html('<div class="Error">Campo obligatorio</div>');
   $("#fide_id").focus();
   return ;
  } else if (isNaN($("#fide_id").val())){
   $('#Info1').html('<div class="Error">Tiene que ser un valor numérico</div>');
   $("#fide_id").focus();
   return ;
  } else {
   var fide_id = $("#fide_id").val(); 
   var dataString = 'fide_id='+fide_id+'&idioma='+language;
   $.ajax({
type: "GET",
url: "../wp-content/themes/Divi/comprobarFormulario.php",
data: dataString,
success: function(data) {       
$('#Info1').fadeIn(1000).html(data);
if (data=="") {
  if (comprobar()) {
//como el formulario ha pasado todas las validaciones lo doy por bueno, hacemos el submit del formulario
document.getElementById('tuForm').submit();
  }
} else {
  $("#fide_id").focus();
  return ;
}     
}   
   });     
  }
} else {
  if (comprobar()) {
//entiendo que si vamos por este else y comprobar devuelve true podemos hacer submit
document.getElementById('tuForm').submit();
  }
}
 
}
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.