从ajax成功函数内部提交表单以检查值

我已经看过大约20个或更多关于这个主题的post,但它们要么对我没有意义,要么略有不同。

这也是一个非常简单的场景。 我有一个表单,当它提交时,我做一个ajax调用,看看该电子邮件是否已被其他用户取走。 如果不采取我想提交表格,如果是,请不要提交表格。

这是HTML

JS

 $('#greatForm').submit(function(){ // GET THE VARS var email = $('#email').val(); $.ajax({ data: { 'field1' : email }, type: 'GET', dataType: 'json', url: 'url.php', beforeSend : function(){ }, success: function(answer){ if(answer.error === false){ // Submit this form without doing the ajax call again } if(answer.error === true){ // Not ok, don't submit this form } } }); return false; }); 

谢谢你的帮助。

**更新**也许我没说错。 我的意思是如果“answer.error === false”为真,那么submit函数应该返回true。

所以在AJAX完成时,如果answer.error为false,则提交应为true,反之亦然……

那更有意义吗?

 $('#greatForm').submit(function(){ if(!$(this).attr('validated')) { // GET THE VARS var email = $('#email').val(); $.ajax({ data: { 'field1' : email }, type: 'GET', dataType: 'json', url: 'url.php', beforeSend : function(){ }, success: function(answer){ if(answer.error === false){ $('#greatForm').attr('validated',true); $('#greatForm').submit(); } if(answer.error === true){ //display the errors } } }); return false; } return true; }); 

这应该可以解决问题,如果已经validation,只需添加一个经过validation的属性即可。 并且只有在未预设属性的情况下才validation表单,否则您提交。

尝试在再次提交表单之前删除“submit”事件处理程序:

 if(answer.error === false){ // Submit this form without doing the ajax call again $('#greatForm').unbind().submit(); } 

从技术上讲,你只需返回true即可“提交”。 浏览器将完成其正常的表单发送过程。 但是,如果您想使用AJAX,则必须进行另一次AJAX调用才能发送表单。 每个请求都是自己的实体。 它不会保持连接对你开放。

但是,@ Dogbert是对的。 这种类型的东西应该在服务器端完成,一旦在那里处理表单数据。 如果您使用AJAX执行此操作,您仍然可以使用返回的响应来通知用户任何错误,但您应该期望他们在进行必要的更正后再次提交表单。

如果我理解正确,你需要php.url示例中的echo treu / false:

 $.ajax({ type: 'POST', url: 'url.php', data: $("#your_form").serialize(), success: function(data) { if (data=='true') { ... } else { 

并在url.php

 echo "true"; echo "false";