0

我的 web 应用程序在 Tomcat 下运行,它非常密集地使用 AJAX 请求,在开发过程中我也必须密集地重新部署 web 应用程序。重新部署后,我通常只需刷新页面就知道用户会话已删除,但我总是会遇到下面描述的场景:

  1. 转到某个页面,一个包含许多 JS 脚本的非常大的页面,它实际上会发出那些密集的 AJAX 请求。
  2. 停止 Tomcat 或重新部署 Web 应用程序。
  3. 刷新页面。
  4. 在登录表单中输入凭据以进行身份​​验证。
  5. 突然在浏览器窗口中得到最后一个AJAX请求响应和在URL栏中的AJAX请求URL。

哇... 对我来说,AJAX 请求 URL 与它们在网页显示区域中的响应一起出现在 URL 栏中看起来很奇怪。这实际上发生在 Firefox 和 Chrome 上(尚未在其他浏览器中测试过)。不幸的是,我无法在从头开始编写的简单页面中重现相同的行为。坦率地说,我真的不明白这些请求会发生什么,以及如果用户在 URL 栏中输入 AJAX 请求/响应,为什么浏览器会“思考”......

非常非常感谢您对这种奇怪行为的可能解释或提示。谢谢!

(也许它可以帮助:所有 AJAX 请求都使用 jQuery 1.4.2 执行)

4

1 回答 1

0

非常抱歉,后来才明白,问题不完整,因为还有一个坑我没说,所以原则上没人能回答。该错误的原因隐藏在...<body onunload="...">标签定义中。这完全出乎意料,但该代码包含一些 AJAX 请求,当用户离开页面时必须调用该请求。我只意识到身份验证模块 ( FORM, j_security_check) 返回了包含Location标头的响应 (HTTP 302) - 这就是浏览器进行重定向的原因

确切的场景是这样的:

  • 打开包含<body onunload="some_ajax_here">.
  • 使用另一个选项卡注销应用程序,以便您可以留在同一页面。
  • 刷新页面,以便 可以调用一些 ajax - 现在不允许此 AJAX 请求,因为它是应用程序的安全部分(您将获得登录页面的转发内容)。
  • 输入凭据,现在您可以直接在浏览器窗口中看到一些 ajax的结果。

作为快速修复,我希望是最后一个,我在该 AJAX 请求之后添加了另一个请求:

$.ajax({
    async: true,
    method: "GET",
    url: document.location.pathname + document.location.search
});

因此,HTML 页面脚本只是将自页面请求作为最后一个请求 -j_security_check返回Location最后使用的 HTML 页面的引用,并且重定向工作正常。也许我的解释不清楚,可能不完整,甚至充满错误,但大体上看起来是这样的。再次非常抱歉,谢谢@ChristopherSchultz!

于 2012-07-31T19:09:58.187 回答