Ajax- beforeSend

时间:2015-07-16 15:19:21

标签: javascript jquery ajax

为了防止两次出错,我使用beforeSend。

hasSent = false

function submit() {
    if (!hasSent)
        $.ajax({
            url: "${createLink(controller:'userInvitation', action:'ajaxUpdate')}",
            type: "POST",
            data: $("#invitationForm").serialize(),
            success: function(data, textStatus, jqXHR) {
                $('#invitationForm')[0].reset();
                $('.thank-you-modal').modal('show');
                hasSent = true;
                console.log(hasSent)
            },

            complete: function() {
                hasSent = false;
                console.log(hasSent)
            }
        });
}

正如您所看到的,只有在hasSent=false时才会发生ajax。 出于某种原因,如果用户在提交按钮上单击多次(非常快)

,也会发生ajax

3 个答案:

答案 0 :(得分:1)

为防止出现此类问题,请在发送ajax之前禁用该按钮,然后在成功函数内部启用

$(mybutton).prop("disabled",true);
// ajax call here

然后

success: function(data, textStatus, jqXHR) {
    $(mybutton).prop("disabled",false);
    // code here
}

答案 1 :(得分:1)

您可以创建另一个标记,例如 isSending

function ov3rfly_replace_include_blank($name, $text, &$html) {

答案 2 :(得分:0)

有两种方法可以做到这一点。

1)创建一个标志并检查按钮是否被按下。如果按下则不执行ajax代码

请求成功后更改标志,如此

   success:function(...)
            {
               flag=false;
            }

或者您可以在按钮单击时禁用按钮,以便执行请求并且不会出现双击情况。像这样启用按钮

 complete:function(..){ $("yourbutton").attr("disabled",false)}