阻止网页加载直到JQuery AJAX调用完成?

Ste*_*eve 4 javascript ajax jquery onload-event

我有一个遗留站点的要求,我无法重新设计屏幕,我不能使用标头无缓存标签,我必须防止用户在他们退出并按下他们的后退按钮后看到缓存的屏幕.

我差不多要解决了(见下面的代码位)

当页面加载时,我使用JQuery AJAX函数调用Web应用程序并查看用户是否仍然登录.如果没有,用户将被重定向到登录屏幕

<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>
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个解决方法的一件大事就是,在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";
     }
 }         
Run Code Online (Sandbox Code Playgroud)

});

Jea*_*ond 6

您可以ajax使用async属性设置为false 的函数执行此操作.

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

  • 另一种方法是将您的主页内容设置为“display:none”,直到 ajax 请求完成,然后设置为“display:inline”(或任何可见样式),这样您就不需要 ajax同步。除非您有一个可见的“正在加载...”指示器,否则最终用户看起来会一样。 (2认同)