我正在使用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逐渐淡出并多次出现。那么我怎样才能检查请求是否已经发送完毕(无需在我的数据库中写入内容)?
答案 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 });