2015-04-14 4 views
0

У меня есть некоторые ссылки на веб-странице, которые перенаправляют пользователя на страницы, где требуется вход в систему. Таким образом, если пользователь не вошел в систему, я хочу, чтобы показать ему модальное окно с сообщением войти.onClick wait для возвращаемого значения

function isLoggedIn(){ 
     var requireLoginCheckStatusUrl="require_login.php?check_login=1"; 
     $.get(requireLoginCheckStatusUrl).done(function(data) { 
      if(data == 2){ 
       var requireLoginModalUrl = "require_login.php?ajax=1"; 
       $.get(requireLoginModalUrl).done(function(data) { 

        $('body').prepend(data); 
        $('body').addClass('stop-scrolling'); 
        return false; 
       }); 
       } 

      }); 


    return true; 
} 

Как вы можете видеть, что есть два асинхронных вызовов в функции, так что мне нужно каким-то образом сделать тег дождаться завершения функции.

И некоторые теги

<a href="only_for_logged_in.ph" onclick="return isLoggedIn();">Click</a> 

PS. Страницы, к которым привязываются теги, защищены от доступа пользователей, которые не вошли в систему, поэтому вам не нужно беспокоиться о безопасности, мне просто нужно показать модальное окно без перенаправления пользователя, но я также хочу сохранить url в href = "", поэтому, когда пользователь входа в систему нажимает на него, он перенаправляет его на страницу.

+0

Я думаю, что вы хотели передать обратный вызов этой функции, которая будет вызываться после того, как второй Аякса успешно. –

+1

использовать метод $ then. – vinayakj

ответ

0

Учитывая, что метод $.get() асинхронный, вы не можете вернуть значение сразу после него, потому что он еще не закончил работу, так что вам нужно, чтобы передать ваши isLoggedIn() функцию а callback, и называют его, когда метод $.get() вызывает обратный вызов, предоставленный .done.

Вот пример:

function isLoggedIn(callback) { 
    var requireLoginCheckStatusUrl="require_login.php?check_login=1"; 
    $.get(requireLoginCheckStatusUrl).done(function(data) { 
     if(data == 2){ 
      var requireLoginModalUrl = "require_login.php?ajax=1"; 
      $.get(requireLoginModalUrl).done(function(data) { 
       $('body').prepend(data); 
       $('body').addClass('stop-scrolling'); 

       // Call your callback when .get finishes working 
       callback(false); 
      }); 
     // I'm assuming that if data is not 2, the user is logged in 
     } else callback(true); 
    }); 
} 

isLoggedIn(function(result) { 
    if (result) { 
     // The user is logged in, do something 
    } else { 
     // The user is not logged in, do something else 
    } 
}); 
+0

спасибо, но я обновил свой вопрос, так как вы можете видеть, что я не хочу, чтобы тег перенаправлял пользователя, пока он не получит ответ (входит в систему или нет) из функции – Stevik

Смежные вопросы