Javascript 在JQuery AJAX调用完成之前停止加载网页?

Javascript 在JQuery AJAX调用完成之前停止加载网页?,javascript,jquery,ajax,onload-event,Javascript,Jquery,Ajax,Onload Event,我有一个传统网站的要求,我不能重新设计屏幕,我不能使用头无缓存标签,我必须防止用户看到缓存屏幕后,他们登出并按下他们的后退按钮 我几乎找到了一个解决方案(请参阅下面的代码位) 加载页面时,我使用jQueryAjax函数调用web应用程序,查看用户是否仍在登录。如果没有,用户将被重定向到登录屏幕 <html> <head> <!-- all the usual header stuff, plus links to the jQuery libaries, firs

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

我几乎找到了一个解决方案(请参阅下面的代码位)

加载页面时,我使用jQueryAjax函数调用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>

}))

您可以使用
ajax
函数将
async
属性设置为false

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

我觉得你应该不惜一切代价避免阻塞用户界面。“等待”加载确实会毁掉一个网站和一个人对该网站的感情。出于好奇:如果用户禁用Javascript,他们可以不登录就访问内容吗?你需要在服务器上执行此操作。不。我们有完整的服务器端身份验证。这是关于他们使用后退按钮查看缓存内容的。我不能关闭服务器端的缓存,因为我们有传统的多屏幕表单,每个屏幕都有数据,在注销后不应该看到这些数据。在这些屏幕上设置无缓存会导致用户返回到一个空白屏幕,并且没有屏幕可供前进…坐视不理。就像下面@Jean-Philippe Bond所说的,那么为什么要使用异步(ajax)调用呢?您最好同步拨打电话,并等待响应以确定下一步操作。为什么选择ajaxSetup?ajaxSetup用于为将来的Ajax请求设置默认值……ajaxSetup将影响将来的所有Ajax调用(通过设置默认值),而@Jean-Philippe的版本仅在一次调用中设置async:false。根据您想要的答案,两个答案都可以工作。我编辑了您的答案以包含选项“cache:false”。在Firefox和Chrome中,页面的缓存副本缓存了变量“data”,该变量给出了一个剩余的错误答案“confirm”。“cache:false”选项强制浏览器/AJAX代码获得新的答案。非常感谢你的回答,巨大的帮助!这将阻塞UI,没有更好的解决方案?另一种方法是在ajax请求完成之前将主页内容设置为“显示:无”,然后设置为“显示:内联”(或任何可见样式),这样就不需要ajax同步。除非您有一个可见的“加载…”指示器,否则最终用户的外观将相同。
  $.ajax({
     url: "/acme/confirm_authentication",
     success: function(data) {
         if( data != "confirmed"){
             location.href = "logout";
         }
     },
     async:false
  });