Javascript 在进行Ajax调用之前防止页面加载

Javascript 在进行Ajax调用之前防止页面加载,javascript,asp.net,ajax,Javascript,Asp.net,Ajax,我们正在集成一个单点登录界面,它提供了一个非常好的远程JavaScript调用来检索用户信息。我们通过远程URL引用的库甚至会更改登录/注销链接的状态,并在用户已经通过身份验证时提供一些用户数据(他们的姓名等等)。资源返回一个我们解析的Json对象,然后更新应用程序中的会话状态,以维护其用户信息 我们的问题是ASP.NET在调用和完成JavaScript对象之前,以及更重要的是在返回数据和向服务器发出Ajax调用以更新会话之前,为HTML提供服务并完成页面加载事件(web表单)。结果是JavaS

我们正在集成一个单点登录界面,它提供了一个非常好的远程JavaScript调用来检索用户信息。我们通过远程URL引用的库甚至会更改登录/注销链接的状态,并在用户已经通过身份验证时提供一些用户数据(他们的姓名等等)。资源返回一个我们解析的Json对象,然后更新应用程序中的会话状态,以维护其用户信息

我们的问题是ASP.NET在调用和完成JavaScript对象之前,以及更重要的是在返回数据和向服务器发出Ajax调用以更新会话之前,为HTML提供服务并完成页面加载事件(web表单)。结果是JavaScript导致页面上的“闪烁”(它以注销开始,然后在脚本完成后切换到登录),页面加载状态不正确,导致我们不必要地重定向用户

是否有人在远程脚本完成之前阻止加载页面?我知道我们可以隐藏正文内容,直到脚本完成,这将消除闪烁(并为用户创建一个恼人的等待),但这不会消除我们潜在的会话问题

有什么想法吗?提前谢谢


BD

第三方脚本可能会修改相关元素、主体或html标记上的类

这将允许您在默认情况下隐藏按钮,并使用添加的类包含css规则,然后显示它们

HTML


如果不是修改类的情况,那么它还可以为您提供一个完成回调钩子,您可以自己切换类

第三方脚本可能会修改相关元素、主体或html标记上的类

这将允许您在默认情况下隐藏按钮,并使用添加的类包含css规则,然后显示它们

HTML



如果不是修改类的情况,那么它还可以为您提供一个完成回调挂钩,您可以自己切换类

您能将ajax调用转换为jsonp吗?如果是这样,那么您可以将调用作为标记进行,这将延迟加载事件,而不会出现“sync ajax”的恐怖。不确定我是否正确理解了这个问题,但您可以在页面加载
Orry后等待javascript执行,让我看看这是否有帮助:1)匿名用户点击登录页面,2)服务器提供的ASP.NET页面,在响应中写出HTML/JavaScript,3)JavaScript事件激发并从远程服务器返回Json对象,4)Ajax调用将返回的数据发送到服务器,5)服务器上的会话正确更新,但是,已经加载的页面现在处于非状态,因为即使JavaScript发现了cookie并将其登录,该页面仍像匿名用户一样加载。该脚本不允许您访问完成回调吗?那将解决很多问题。。如果没有,它会向html或body标记添加任何类吗?它会修改登录按钮上的类吗?您能将ajax调用转换为jsonp吗?如果是这样,那么您可以将调用作为标记进行,这将延迟加载事件,而不会出现“sync ajax”的恐怖。不确定我是否正确理解了这个问题,但您可以在页面加载
Orry后等待javascript执行,让我看看这是否有帮助:1)匿名用户点击登录页面,2)服务器提供的ASP.NET页面,在响应中写出HTML/JavaScript,3)JavaScript事件激发并从远程服务器返回Json对象,4)Ajax调用将返回的数据发送到服务器,5)服务器上的会话正确更新,但是,已经加载的页面现在处于非状态,因为即使JavaScript发现了cookie并将其登录,该页面仍像匿名用户一样加载。该脚本不允许您访问完成回调吗?那将解决很多问题。。如果没有,它会向html或body标记添加任何类吗?它会修改你登录按钮上的类吗?是的,根据你之前的评论,我们可以访问完成回调。当它触发时,我们正在用会话信息更新服务器。我们的整个问题都源于这样一个事实:代码在远程服务器上执行,并且在脚本启动和停止之间有一个延迟,有时长达几秒钟。我不想强迫用户在屏幕加载时观看空白页面,但另一种选择是这种“跳跃”行为,因为菜单以“登录”开始,几秒钟后更新为“欢迎[你的名字]|注销”。这也是会话不稳定的原因,因为过去加载的是一个空会话,然后会话会在几秒钟后正确更新,尽管页面已经通过响应生成。我开始认为,当完成回调指示成功登录时,我们可能需要强制刷新,但这将导致页面加载暂停,然后重定向,这对用户来说更烦人。因此,按照我的建议…加载页面(用户需要速度)并隐藏与登录相关的元素,直到请求完成并且脚本进行了修改。会话数据可以在ajax请求中更新。我习惯于构建具有大量内部客户端路由(完整客户端MVC)和身份验证的单页javascript应用程序。我看不出有任何理由你需要重新加载一整页Charlietfl,是的,你是对的,如果我们有幸重建这个版本,我们就可以实现你的概念。然而,我们需要在现有的web表单应用程序中改进一个解决方案,并且根本没有预算来进行这样的大修。好的解决方案。是的,根据你之前的评论,我们可以访问完成回调。当它触发时,我们正在用会话更新服务器
<!-- BEFORE -->
<button id="login-btn">Login</button>
<!-- AFTER-->
<button id="login-btn" class="loginScriptButtonClass">Login</button>
<!-- BEFORE -->
<body>
<!-- AFTER-->
<body class="loginScriptBodyClass">