0

我正在用 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

4 回答 4

2

只需创建一个sendMe()函数,然后从success: That 调用该函数就可以了。

您的代码不起作用的原因是因为 javascript 没有等待 ajax 调用返回,在 ajax 调用之后它立即评估 sendMe ,此时仍然是错误的。

您当然可以考虑同步进行此调用以防止这种情况发生,但我不确定这是正确的方法。(async : false自 jQuery 1.8 起已弃用)

于 2012-07-11T14:27:30.573 回答
2

您的条件 if(sendMe == 'true') ... 何时被调用?

做一个这样的小功能:

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

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

于 2012-07-11T14:35:37.443 回答
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,我们阻止了提交,然后我们直接提交表单绕过所有 jQuery 的提交处理程序使用form.submit();

于 2012-07-11T14:38:50.820 回答
0

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

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

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

于 2012-07-11T14:38:55.473 回答