我使用 Spring MVC 和 Javascript / ajax 。 我的ajax脚本引用服务器端资源的方式存在问题。
说我有两页需要通过ajax使用相同的服务器端资源:
第一页的网址是:
/myapp/advertisement/28/edit
/myapp/signup
说我的ajax脚本需要使用的服务器端资源是:
/myapp/geolocation/addressAutocomplete
截至目前,我已经硬编码应用程序上下文路径,即我的ajax脚本中的 /myapp
。
如果我的应用程序上下文路径发生变化,我需要更新的是我的脚本。
有解决方法吗?
答案 0 :(得分:7)
在包含脚本的HTML页面中,您可以放置指向上下文的HTML base
标记。请参阅How to get domain URL and application name?
您可以在http://www.w3schools.com/tags/tag_base.asp处了解base
标记The <base> tag specifies the base URL/target for all relative URLs in a document.
在决定是否使用此标记之前,可能值得阅读Is it recommended to use the <base> html tag?的答案
答案 1 :(得分:6)
您可以使用$.ajaxPrefilter()
为所有jQuery AJAX请求添加上下文路径。
可以在页面的<script>
元素中配置它,其中上下文路径值可用(例如JSP中的${pageContext.request.contextPath}
)。
答案 2 :(得分:0)
我在外部JS文件中使用AJAX请求在JSP页面中遇到了相同的问题,我通过在JSP中使用包含contextPath的隐藏字段解决了该问题:
<input type="hidden" id="contextPath" value="<%=request.getContextPath()%>" readonly></input>
在JS文件中,获取隐藏字段的值:
var contextPath = $('#contextPath').val();
最后,通过串联上下文路径和相对URL来进行请求调用:
$.ajax({
type: "GET",
contentType : "application/json",
dataType: 'json',
url: contextPath + '/home/reporting',
success: function(data) {
}
});
希望这对遇到相同问题的人有所帮助