如何避免在js / ajax脚本中对应用程序上下文路径进行硬编码

时间:2013-09-05 15:04:50

标签: javascript jquery ajax spring-mvc

我使用 Spring MVC Javascript / ajax 我的ajax脚本引用服务器端资源的方式存在问题。

说我有两页需要通过ajax使用相同的服务器端资源

第一页的网址是:

  • /myapp/advertisement/28/edit
  • /myapp/signup

说我的ajax脚本需要使用的服务器端资源是:

  • /myapp/geolocation/addressAutocomplete

截至目前,我已经硬编码应用程序上下文路径,即我的ajax脚本中的 /myapp

如果我的应用程序上下文路径发生变化,我需要更新的是我的脚本。

有解决方法吗?

3 个答案:

答案 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) {
                    }
       });

希望这对遇到相同问题的人有所帮助