Una pequeña variación de esta pregunta es: Quiero usar jquery y ajax para presentar un mensaje de error a un usuario, pero luego hacer el procesamiento normal si no hay ningún error.
Supongamos que el método "check" devuelve una respuesta que está vacía si no hay ningún error, y tiene el error (s) si hay alguna.
A continuación, puede hacer algo como esto en su función de lista:
$("#theform").submit(function() {
var data = { ... }
$.get('/check', data,
function(resp) {
if (resp.length > 0) {
$("#error").html(resp);
} else {
$("#theform").unbind('submit');
$("#theform").submit();
}
});
event.preventDefault();
});
Así que, ¿cómo funciona?Cuando se activa la función de envío externo, genera los datos necesarios para la llamada AJAX (aquí se obtiene la función de nivel superior). La llamada está programada y el hilo de operación principal continúa de inmediato, pero el envío se detiene de forma incondicional, por lo que no ocurre nada aparente.
Algunos pasa el tiempo, y la llamada AJAX devuelve el resultado de la solicitud. Si no está vacío, el resultado se muestra al usuario.
Si la respuesta está vacía, sin embargo, la función de envío no está vinculada. Esto evita que el sistema realice una llamada adicional a través de la función de envío externo. La función de envío interno se llama. Esto desencadena un envío de formulario real al objetivo del formulario, y la vida continúa como se esperaba.
Parte del problema, pero principalmente el problema es que la función ajax es asíncrona y por lo tanto no puede devolver un valor porque la ejecución del código no espera a que se complete esta función. – Sylverdrag