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

How to avoid hard-coding the application context path in js/ajax scripts

本文关键字:路径 上下文 应用程序 编码 何避免 js 脚本 ajax      更新时间:2023-09-26

我使用Spring MVCJavascript/ajax我对我的 ajax 脚本引用服务器端资源的方式有问题。

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

第一页的网址是:

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

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

  • /myapp/geolocation/addressAutocomplete

到目前为止,我已经对应用程序上下文路径进行了硬编码,即在我的 ajax 脚本中 /myapp

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

有没有解决方案?

在包含脚本的 HTML 页面中,您可以放置指向上下文的 HTML base标记。 请参阅如何获取域 URL 和应用程序名称?

您可以在 http://www.w3schools.com/tags/tag_base.asp 上阅读有关base标签的信息,其中指出The <base> tag specifies the base URL/target for all relative URLs in a document.

在决定是否使用此标签之前,可能值得阅读是否建议使用

html 标签的答案?
您可以使用

$.ajaxPrefilter()在所有jQuery AJAX请求前面附加上下文路径。

它可以在页面的<script>元素中进行配置,其中上下文路径值可用(例如 ${pageContext.request.contextPath}在JSP中)。

我在外部 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) {
                    }
       });

希望这能帮助任何面临相同问题的人