只提交页面是ajax成功的

时间:2012-07-11 14:25:41

标签: php jquery ajax

我正在发送jQuery和PHP的电子邮件,如果ajax成功,我需要告诉页面提交,否则不提交。 我试图将返回值放在成功和错误属性中,但这不起作用,所以我想看看我是否可以通过返回false将表单设置为不发送但如果成功则让它为某些页面提交页面服务器端工作。

在下面的示例中,我尝试设置变量并使用条件来读取它。我收到一条错误消息,因为该值似乎没有全局传递,因此当条件读取sendMe时,它表示它未定义。

有没有办法正确地做到这一点?

$.ajax({
    type: "POST",
    url: "send.php",
    data: data,
    success: function(){
        var sendMe = 'true';
    },
    error: function(){
        alert('Error: Message could not be sent');
    }
});

if (sendMe == 'true'){
    //Submit the page...                    
}
else {
    return false;
}

4 个答案:

答案 0 :(得分:2)

只需创建一个sendMe()函数,然后从success:调用该函数 这应该可以解决问题。

你的代码不起作用的原因是因为javascript没有等待ajax调用返回,就在ajax调用之后它会评估sendMe,在那时它仍然是假的。

当然可以考虑同步进行此调用以防止这种情况,但我不确定这是正确的方法。 (从{jQuery 1.8开始不推荐使用async : false

答案 1 :(得分:2)

你的条件是什么时候      if(sendMe =='true')... 有没有被召唤?

做一个像这样的小功能:

    function sendMe(){
    // whatever your form's id is, put it in place of myForm
    $("#myForm").submit();
    return true;
    }

并在你的ajax成功块中调用函数

答案 2 :(得分:0)

尝试使用此设置:

var form = this;
$.ajax({
    type: "POST",
    url: "send.php",
    data: data,
    success: function(){
        form.submit(); // submit form, bypassing jQuery events
    },
    error: function(){
        alert('Error: Message could not be sent');
    }
});
return false; // prevent submit

在ajax请求之后返回false,我们阻止提交,然后我们使用form.submit();

直接提交绕过所有jQuery的提交处理程序的表单

答案 3 :(得分:0)

将表单设置为在提交事件上通过验证器方法:

<form onSubmit='return checkForm();'> </form>

在此方法中 - checkForm() - 正常执行您的ajax帖子。如果ajax帖子返回为“成功”,请继续使用提交,然后使用return false;取消提交并相应地通知用户。