如何根据ajax调用中函数的结果使用jQuery取消单击事件?

如何根据ajax调用中函数的结果使用jQuery取消单击事件?,jquery,ajax,preventdefault,Jquery,Ajax,Preventdefault,我的目标是捕获我网站上的所有点击事件,检查用户是否仍然登录,然后让他们根据ajax调用的结果继续或取消请求的操作,ajax调用决定了他们当前的登录状态 我之所以这样做是因为用户经常打开窗口,进行多项选择,运行报告,打开内部选项卡。。。允许超时的默认行为会导致用户丢失工作 因此,步骤1:(截取所有点击事件) 步骤2:(取消所有可单击对象的事件作为测试) 步骤3:(检查登录状态) 步骤4:(如果登录已过期,则阻止该操作) “isOpen”变量只是标识注销的用户脚本是否已运行。我试图直接从ajax调用

我的目标是捕获我网站上的所有点击事件,检查用户是否仍然登录,然后让他们根据ajax调用的结果继续或取消请求的操作,ajax调用决定了他们当前的登录状态

我之所以这样做是因为用户经常打开窗口,进行多项选择,运行报告,打开内部选项卡。。。允许超时的默认行为会导致用户丢失工作

因此,步骤1:(截取所有点击事件)

步骤2:(取消所有可单击对象的事件作为测试)

步骤3:(检查登录状态)

步骤4:(如果登录已过期,则阻止该操作)

isOpen”变量只是标识注销的用户脚本是否已运行。我试图直接从ajax调用访问preventDefault,但为了测试而移动了它

我想我的问题是时间。。。如果我在if语句之前的步骤4中放置了一个警报,那么preventDefault命令可以工作,但在其他情况下它不能工作。这就好像事件在我调用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; });