[英]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.