我有一些 JavaScript 正在对相对 URL 进行 Ajax 调用(使用 jQuery)。
var servletUrl = "someservlet";
$.ajax({
type: "POST",
url: servletUrl,
success: function(response) {
// ...
}
});
在哪里"someservlet"
是:
@WebServlet("/someservlet")
public class SomeServlet extends HttpServlet
我在多个页面中使用相同的脚本。当从 servlet 上下文根中的页面使用时,相对 url 将相对于 servlet 上下文根进行解析,这是正确的。当从子文件夹中的页面使用时,URL 会相对于子文件夹进行解析,这将返回 404 错误。
我希望能够重用这个 JavaScript,而不必根据它在其中使用的页面类型对其进行修改。理想情况下,我需要相当于 JSTL 的 <c:url>
标签。 JavaScript 中有什么允许我创建相对于 servlet 上下文根的 URL 吗?
最佳答案
几个选项:
设置一个 HTML
<base>
具有该值的元素(注意:有自己的 advantages and disadvantages )<head> <base href="${pageContext.request.contextPath}/" /> ... </head>
然后在 JS 中:
var contextPath = $("base").attr("href"); var servletUrl = contextPath + "someservlet"; // ...
或者在某处设置一个数据属性
<html data-contextPath="${pageContext.request.contextPath}/"> ... </html>
然后在 JS 中:
var contextPath = $("html").data("contextPath"); var servletUrl = contextPath + "someservlet"; // ...
或者用该值设置一个全局 JS 变量(不好的做法):
<head> ... <script>var contextPath = "${pageContext.request.contextPath}/";</script> </head>
然后在 JS 中:
var servletUrl = contextPath + "someservlet"; // ...
关于javascript - 如何执行相当于 JSTL 的 c :url in JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681202/