Остановить загрузку веб-страницы до завершения вызова JQuery AJAX?

У меня есть требования к устаревшему сайту, где я не могу изменить дизайн экранов, я не могу использовать теги без кэширования заголовка, и я должен запретить пользователю видеть кэшированные экраны после того, как они вышли из системы и нажали кнопку "Назад".

Я почти до решения (см. Код немного ниже)

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

<html>
<head>
 <!-- all the usual header stuff, plus links to the jQuery libaries, first script tag on page below -->

<script language = "javascript">

 $.get("/acme/confirm_authentication",function(data){
            if( data != "confirmed"){
                location.href = "logout";
            }
  }); 



</script>
</head>
<body>

blah blah blah
</body>
</html>

Большая вещь, которая мне не нравится в этом обходном пути, состоит в том, что за долю секунды я могу просматривать содержимое до завершения функции JQuery.

Есть ли способ удержать страницу от загрузки / рендеринга, пока функция JQuery AJAX не остановится?

Спасибо


Обновление: Ответ:


Я изменил принятый ответ ниже, чтобы включить опцию "cache: false". В Firefox и Chrome кэшированные копии страницы, которые были получены с помощью кнопки "Назад", запускали бы.ajax(), но использовали бы кэшированную копию переменной "data", что давало бы мне устаревший ответ.

$.ajax({
 url: "/acme/confirm_authentication",
 async:false,
 cache: false,
 success: function(data) {
     if( data != "confirmed"){
         location.href = "logout";
     }
 }         

});

1 ответ

Решение

Вы можете сделать это с ajax функция с async свойство установлено в false.

  $.ajax({
     url: "/acme/confirm_authentication",
     success: function(data) {
         if( data != "confirmed"){
             location.href = "logout";
         }
     },
     async:false
  });
Другие вопросы по тегам