Estoy usando el formulario con la etiqueta onsubmit. Y en la función onsubmit llamaré a ajax y devolveré verdadero en la función de éxito y falso en la sección de error. Pero siempre se ha presentado el formulario.
html
<form action="/" method="post" onsubmit="return formsubmit()">guion
function formsubmit() { "use strict"; var isBasic = $(".test").val() //this is hidden element if (isBasic === "true") { return true; } if (isBasic === "false") { $.ajax({ type: "post", url: "/", data: "sample", success: function (data) { if (data.success) { return true; } if (!data.success) { return false; } }, error: function () { } }); } }}
esto no funciona para mi siempre formulario enviado. Por favor ayúdame a resolver esto.
Tiene razón al desear un valor de retorno de su función de "envío de formulario", pero no puede regresar de una llamada asíncrona (la llamada ajax es asíncrona).
Reestructure su código para capturar un clic de botón en lugar de responder a un envío de formulario. En el evento de clic de botón, ejecute su llamada ajax, pasando una función de devolución de llamada a la llamada ajax. En la función de devolución de llamada, decida si envía o no su formulario.
cambia tu código así.
function formsubmit() { "use strict"; var isBasic = $(".test").val(); //this is hidden element if (isBasic === "false") { $.ajax({ type: "post", url: "/", data: "sample", success: function (data) { if (data.success) { return true; } if (!data.success) { return false; } }, error: function () { } }); }else{ return true; } return false; } }function formsubmit() { "use strict"; var isBasic = $(".test").val() //this is hidden element if (isBasic === "true") { return true; } if (isBasic === "false" && !$(this).attr('submit-suggest')) { $.ajax({ type: "post", url: "/", data: "sample", success: function (data) { if (data.success) { $(this).attr('submit-suggest',1); $(this).submit(); } if (!data.success) { $(this).attr('submit-suggest',0); } }, error: function () { $(this).attr('submit-suggest',0); } }); return false; } return true; }