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

时间:2011-06-23 16:47:38

标签: jquery ajax forms

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

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

这是HTML

<form id='greatForm' action='godothat.php' method='post'>
<input type='submit' id='email'>
<button>Send</button>
</form>

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,反之亦然......

这更有意义吗?

4 个答案:

答案 0 :(得分:7)

$('#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;
});

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

如果我理解正确,你需要从php.url中回显true / false 例如:

$.ajax({

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

和url.php

echo "true"; 
echo "false";