如何检查是否已经使用Jquery发送了ajax请求?

时间:2012-05-04 16:17:19

标签: php jquery ajax

我正在使用Ajax请求使用Jquery发布表单。

$.ajax( 
        { 
            type: "POST", 
            url: "login.php", 
            data: $("#signin").serialize(),
            dataType: "json",
            cache: false,
            success: function(data, textStatus) {
                if (data.redirect) {
                    window.location.replace(data.redirect);
                }
                else {
                    $('#some').fadeOut(200);
                    $('#some2').fadeIn(200);
                    $("#some3").html(data.form);
                    $("#some").delay(2000).fadeOut(200);
                    $('#some2').delay(2800).fadeIn(300);
                }
            }           
        });

现在,只要您点击“登录”按钮,就会发出ajax请求。现在的问题是,如果多次按下按钮,则会多次执行其他情况,这将导致#some,#some2和#some3逐渐淡出并多次出现。那么我怎样才能检查请求是否已经发送完毕(无需在我的数据库中写入内容)?

5 个答案:

答案 0 :(得分:0)

在登录时设置布尔标志,例如login_in_process,在true值中检查此标志。如果true然后空白返回,请在每次点击时检查此标志。成功和错误回调将其设置为false状态。

答案 1 :(得分:0)

您可以使用布尔值来记录是否已单击它:

var loginClicked = false;

$('input_button_element').click(function(){
  if (!loginClicked) {
    loginClicked = true;
    // your js here - you may want to add some visual feedback to the user also
  }
});

答案 2 :(得分:0)

你可以创建一个全局var

var loginClick = false;

在您的方法中,首先检查该值

if (!loginClick) {
  loginClick = true;
  //your ajax code;
}

答案 3 :(得分:0)

来自here

您可以使用.one()方法并在ajax回调中再次设置它。

function doAjax(){
    // Your Ajax call.
    $.ajax({..., complete: function() {
        // Ajax call done, re-enabling the button/link
        $("#buttonId").one('click', doAjax);
    }, ...});
}

$("#buttonId").one('click', doAjax);

答案 4 :(得分:0)

您必须在全局范围内存储布尔值,例如存储在窗口对象上的一个:

if (!window.isClicked) {
    window.isClicked = true;
    ...Do your ajax call here        
}

记住要始终恢复window.isClicked的值,而不仅仅是在ajax()的成功回调中:

var jqxhr = $.ajax( ... )
.done(function() {  })
.fail(function() {  })
.always(function() { window.isClicked = false });