繁体   English   中英

如何避免不产生会话的同步AJAX

[英]How to avoid synchronous AJAX without spawning sessions

我的页面在启动时通过AJAX从服务器加载了所有必要的数据。 这包括用户的语言设置,各种分类器,一些业务数据等。

我面临的问题是,当用户第一次访问该页面时,所有这些不同的AJAX调用会同时启动。 这意味着在服务器端,大多数服务器都分配有不同的JSESSIONID -s(我在Tomcat 8上使用Spring,而没有任何复杂的配置)。 结果,一些数据在一个会话中在服务器端被初始化,但是浏览器最终可能最终使用不同的会话,并且无法访问由早期ajax调用建立的数据。

我想通过在开始时使用快速同步AJAX调用来解决此问题,以便在返回并获得JSESSIONID之后,所有后续调用都将在此原始会话中进行。

$.ajax("api/language", {
    type: "GET", 
    cache: false,
    async: false,
    success: function(data) { 
        //do stuff;
    }
});
// more AJAX calls

它可以工作,但是我收到警告消息,不赞成在主线程上同步XMLHttpRequest。 现在-我理解了这种同步调用通常对UI不利的原因,但是如果我想强制所有AJAX调用使用相同的服务器端会话,还有哪些其他选项对我有用?

我可以通过使用回调并将所有其余页面初始化代码放在其中,并在第一个AJAX调用的“成功”部分中执行它来实现相同的结果,但是这样做的效果与在主同步?

我将在加载HTML文档时启动会话,而不是从API请求某些内容时启动会话。

或者,从第一个的成功回调中触发后续的API调用。

“强悍”解决方案

最后,您确实提供了自己的解决方案:将所有内容包装在异步AJAX调用中。 它类似于同步解决方案,但是通过这种方式,您可以设置加载动画或类似的动画。


“不错”的解决方案

另一个可能更好的解决方案。 当用户到达时,您可以使用生成的jsessionid重定向到Web应用程序的起始页面。 这可以通过servlet完成。 我非常确定可以将Tomcat配置为执行此操作,而无需编写您自己的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM