【问题标题】:AJAX GET-request appears in URL bar after refreshing the page in Tomcat that gets restarted刷新Tomcat中重新启动的页面后,AJAX GET-request出现在URL栏中
【发布时间】:2012-07-29 08:05:38
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • @ChristopherSchultz,它发生在所有版本的 Tomcat 6.0.x 上,它可能可以在 Tomcat 7 上重现。现在我在 6.0.32 上。
  • 这可能只是基于 FORM 的身份验证的规范兼容行为,尽管我希望 first AJAX 响应会显示在您的浏览器中,而不是最后一个一。
  • @ChristopherSchultz 正如我后来理解的那样,基于 FORM 的身份验证器返回了一个重定向。请在下面查看我的答案,并感谢您提供查看身份验证模块响应的提示 - 这实际上解决了问题!

标签: ajax http tomcat browser get-request


【解决方案1】:

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

确切的场景是这样的:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2018-03-31
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2014-08-15
    • 2016-10-09
    相关资源
    最近更新 更多