Esta pregunta se ha hecho muchas veces, pero todavía confundía dónde cometí un error. Necesito validar el formulario con ajax y enviarlo si todo está bien. Aquí está mi código:
$('#tl_form form').on('submit',function(e) { var $form = $(this); if($form.attr('validated')){ //Here the form should be send IMHO, but "return true" don't do it somehow: console.log('ok'); // I can just see this 'ok' in console. return true; } $.ajax({ type: "POST", data: $form.serialize() + '&action=validate_tl_form', url: ajaxurl, success: function(data) { if (data.success) { $form.attr('validated',true).submit(); } else { console.log('error'); } }, }); return false; });
Recomendaría volver a trabajar su lógica.
Si está enviando el formulario completo al servidor de todos modos para su validación, el servidor también podría simplemente aceptarlo cuando sea válido, en lugar de enviar "es válido" al cliente y esperar que se vuelva a publicar el formulario.
Puede mostrar una sugerencia de validación en el cliente cuando el formulario no era válido.
$('#tl_form form').on('submit', function (e) { e.prenventDefault(); $.post($(this).attr('action'), $(this).serialize()).done(function (data) { if (data.success) { // go to next step/page } else { // show validation hint } }); });
e.prenventDefault();
evita que el navegador envíe el formulario de la forma habitual, ya que lo envía a través de Ajax.