Jquery 如何使用输出true或false的延迟结果

Jquery 如何使用输出true或false的延迟结果,jquery,Jquery,我很难理解承诺和尊重 我有一个简单的函数,如果用户是否登录,它将返回true或false: function checkAuth() { var IsSignedIn = false; $.ajax({ dataType:"json", url: '/utility/SignInStatus', //only returns true if signedin. or else nothing is returned. success: fu

我很难理解承诺和尊重

我有一个简单的函数,如果用户是否登录,它将返回true或false:

function checkAuth() {
var IsSignedIn = false;
    $.ajax({
        dataType:"json",
        url: '/utility/SignInStatus', //only returns true if signedin. or else nothing is returned.
        success: function(result) {
           IsSignedIn = (result);
        },
        error: function() {
            alert("you're not logged in");
        }
    });
return (IsSignedIn);
}
在另一个文件中,我想使用
checkAuth()
函数查看用户是否登录。如果checkAuth()返回true,则可以执行操作。如果返回false,则无法执行操作

$(document).on('click', 'a[name="deleteaccount"]', function(event) {
  $.when(checkAuth()).done(function(result) {

  // Here is where I want to see if checkAuth() was true or false

   if (!result) {
   // Show alert from the error return from checkAuth()

   } else {
   // Go ahead and delete the account code here

   }

    });)
    };

我根本无法进入语句的
部分。当
结果
时,我如何实现这一点?

以下方法完全遵循您的逻辑(并回答给定的问题):

。。。但是我会考虑不同的方法:您的代码> $Ajax < /Cord>调用应该导致“成功”,并且只有当用户被授权时,在所有其他情况下,将返回一个403代码(或类似的)。使用这种方法,可以使用
$.ajax
返回的对象而不使用额外的
延迟对象

function checkAuth() {
  return $.ajax({
    // ...
    error: function() {
      // some common action here - modal, etc.
    }
  });
}

checkAuth().done(function(result) {
  // authorized
}).fail(function(result) {
  // not authorized - do some UC-specific action
});

==
用于
=
生成一个。您检查了deferred.resolve的结果(在
done
中),但从未设置它。不确定您为什么需要它:是否应该在用户每次单击链接时调用
checkAuth
函数?您不能只调用一次并将结果存储在某个状态变量中吗?因为会话可能会在后台(服务器上)过期,即使页面可能会被保留open@raina77ow你能解释一下如何从checkAuth()得到响应并评估它是真是假吗?但是我需要checkAuth()的错误在他们未登录时输出警报。最后,我想用一个要求用户注册/登录的模式对话框来替换警报。因此,只要在
返回之前触发模式,在
//fail
@chiliNUT之后触发模式,这意味着我必须为每个操作执行该操作。可能会发生数百起行动。我必须在所有这些文件中重复相同的代码。这是不可行的,听起来也不像是好的做法。是的。您可以在
dtd.resolve(false)
@volumeone之前触发模式,但是,您最初的问题是如何评估check-auth的结果并显示警报,因此理所当然,您会将警报放在那里,只要不重复您的代码,我仍然不知道您的意思,您仍然必须将onclick事件应用于任何会受到影响的链接,因此我不认为onclick事件中的模态警报逻辑有什么问题
function checkAuth() {
  return $.ajax({
    // ...
    error: function() {
      // some common action here - modal, etc.
    }
  });
}

checkAuth().done(function(result) {
  // authorized
}).fail(function(result) {
  // not authorized - do some UC-specific action
});