Javascript – 根据ajax响应停止表单提交

我想使用AJAX来确定表单的值是否可以接受(这不是表单validation)。 AJAX result将确定表单是否已提交。

下面,您将看到我在提交表单时执行AJAX调用,并根据返回的内容(可接受的空白或不可接受的错误消息),我想return true; 或者return false; $("form").submit

我怀疑我在AJAX的success:遇到了麻烦success: 。 请帮我从AJAX调用中获取result ,以便我可以执行if (result == "") { return true; } else { return false; } if (result == "") { return true; } else { return false; } if (result == "") { return true; } else { return false; }

工作方式:

 $("form").submit(function(e) { e.preventDefault(); var form = this; var tray = $('select[name=tray_id]').val(); $.ajax({ type: "POST", url: "modules/reserve-check.php", data: {tray_id: tray}, cache: false }).done(function(result) { if (result == "") form.submit(); else alert(result); }).fail(function() { alert('ERROR'); }); }); 

原版的:

 $("form").submit(function() { var tray = $('select[name=tray_id]').val(); $.ajax({ type: "POST", url: "modules/reserve-check.php", data: {tray_id: tray}, cache: false, success: function(result) { alert(result); }, error: function(result) { alert(result); //This works as expected (blank if acceptable and error msg if not acceptable) } }); /* if (result == "") return true; else return false; */ return false; //this is here for debugging, just to stop the form submission }); 

由于ajax调用是异步的,您必须阻止表单提交,然后在返回结果时,检查它是否与条件匹配并使用本机提交处理程序提交表单,避免jQuery事件中的preventDefault()处理程序

 $("form").submit(function(e) { e.preventDefault(); var self = this, tray = $('select[name=tray_id]').val(); $.ajax({ type: "POST", url: "modules/reserve-check.php", data: {tray_id: tray}, cache: false }).done(function(result) { if (result == "") self.submit(); }).fail(function() { alert('error'); }); }); 

使用e.preventDefault(); 防止表单提交,然后使用this.submit() (不是调用jQuery .submit()触发器函数,而是使用本机

.submit()

函数)来提交表单。

 $("form").submit(function(e) { e.preventDefault(); var tray = $('select[name=tray_id]').val(); var form = this; $.ajax({ type: "POST", url: "modules/reserve-check.php", data: {tray_id: tray}, cache: false, complete : function(result){callback(result, form)} }); }); var callback = function(result, form){ if(!result) form.submit(); };