8

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

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

第一页的网址是:

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

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

  • /myapp/geolocation/addressAutocomplete

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

如果以及当我的应用程序上下文路径发生更改时,我需要更新整个脚本。

有解决办法吗?

4

3 回答 3

7

在包含脚本的 HTML 页面中,您可以放置​​一个base指向上下文的 HTML 标记。请参阅如何获取域 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.

在决定是否使用此标签之前,可能值得阅读是否建议使用 <base> html 标签的答案?

于 2013-09-05T15:24:41.073 回答
6

您可以使用$.ajaxPrefilter()为所有 jQuery AJAX 请求添加上下文路径。

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

于 2013-09-05T15:26:46.377 回答
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) {
                    }
       });

希望这可以帮助任何面临同样问题的人

于 2020-01-16T11:48:41.607 回答