0

我正在使用 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 请求。现在的问题是,如果您多次按下按钮,else case 将执行多次,这将导致#some、#some2 和#some3 淡出并多次出现。那么我如何检查请求是否已经发送(而不必在我的数据库中写入一些东西)?

4

5 回答 5

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 });
于 2012-05-04T16:23:54.107 回答
0

这里

您可以使用.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);
于 2012-05-04T16:23:26.313 回答
0

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

于 2012-05-04T16:20:03.543 回答
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
  }
});
于 2012-05-04T16:21:20.360 回答
0

你可以制作一个全局变量

var loginClick = false;

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

if (!loginClick) {
  loginClick = true;
  //your ajax code;
}
于 2012-05-04T16:21:21.333 回答