如何根据ajax调用中函数的结果使用jQuery取消单击事件?
我的目标是捕获我网站上的所有点击事件,检查用户是否仍然登录,然后让他们根据ajax调用的结果继续或取消请求的操作,ajax调用决定了他们当前的登录状态 我之所以这样做是因为用户经常打开窗口,进行多项选择,运行报告,打开内部选项卡。。。允许超时的默认行为会导致用户丢失工作 因此,步骤1:(截取所有点击事件) 步骤2:(取消所有可单击对象的事件作为测试) 步骤3:(检查登录状态) 步骤4:(如果登录已过期,则阻止该操作) “isOpen”变量只是标识注销的用户脚本是否已运行。我试图直接从ajax调用访问preventDefault,但为了测试而移动了它 我想我的问题是时间。。。如果我在if语句之前的步骤4中放置了一个警报,那么preventDefault命令可以工作,但在其他情况下它不能工作。这就好像事件在我调用ajax之前完成了一样,但我不确定这是问题所在如何根据ajax调用中函数的结果使用jQuery取消单击事件?,jquery,ajax,preventdefault,Jquery,Ajax,Preventdefault,我的目标是捕获我网站上的所有点击事件,检查用户是否仍然登录,然后让他们根据ajax调用的结果继续或取消请求的操作,ajax调用决定了他们当前的登录状态 我之所以这样做是因为用户经常打开窗口,进行多项选择,运行报告,打开内部选项卡。。。允许超时的默认行为会导致用户丢失工作 因此,步骤1:(截取所有点击事件) 步骤2:(取消所有可单击对象的事件作为测试) 步骤3:(检查登录状态) 步骤4:(如果登录已过期,则阻止该操作) “isOpen”变量只是标识注销的用户脚本是否已运行。我试图直接从ajax调用
任何帮助都将不胜感激。。。谢谢大家! AJAX代表异步的Javascript和XML。默认情况下,AJAX调用不会阻塞,它们在后台运行,而其余代码继续运行。因此,在AJAX调用完成之前完成事件是正确的
jQuery的ajax()方法允许您将async:false指定为更改此行为的参数之一,这将满足您的需要。我看到此工作的唯一方法是使用async:false 但是,请注意,如果使用async:false,“ajax”调用将挂起浏览器,直到它返回。请使用。连同
async:false
。但正如kingjiv所建议的,async:false有其缺点,请使用必要的UI范例(游标到沙漏或ajax加载灯箱等)
A) 请研究如何格式化代码B)在编辑文章时,为了修复格式问题,我在ajax complete方法中遇到了一个语法错误
{DoSomeStuff})
关闭的位置在哪里?
comnig?也进行了编辑,但我保留了语法错误。完成后的所有代码:
变量应该是完成
事件处理程序的一部分吗?如果是这样的话,testMe看起来就在这之外,它将在异步调用完成后立即执行。将testMe移动到完整的处理程序中。
$(document).ready(function() {
$(document).click(function(event) { fncCheckLogin(event); });
});
function fncCheckLogin(objEvent) { objEvent.preventDefault(); }
$.ajax({
type:"POST",
url: "myURL",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType:"json",
complete: function(x){
if(x){
if (!isOpen) {
DoSomeStuff
}
);
isOpen = true;
testMe(objEvent);
}
} else {
if (isOpen) {
isOpen = false;
}
}
}
});
function testMe(objEvent) { if (isOpen) { objEvent.preventDefault(); }}
$("body").delegate("a", "click", function() {
var loggedIn = false; //def treat as not Logged in
$.ajax({
type:"POST",
url: "myURL",
data: "{}",
async:false,
contentType: "application/json; charset=utf-8",
dataType:"json",
complete: function(x){
if(x) loggedIn = true;
}
});
if(loggedIn){
//Call DOSOMETHING here
}
//return local var ajaxRet so the event will only bubble when loggedIn == true
return loggedIn; });