有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无Java应用程序上下文的javascript AJAX调用

我有一个(Spring支持的)Java应用程序,它有一些AJAX调用。问题是我正在使用应用程序上下文(/spring-mvc)来访问服务器端功能

var api = '/api/v1';
var context = '/spring-mvc' + api;

$.ajax({
  type: 'GET',
  url: context + '/users/' + $('#user-id').val()
}).done(function (response) {
  callback({ data: response.user, binding: response.binding });
}).fail(function (jqXHR, textStatus, errorThrown) {
  callback({ jqXHR: jqXHR });
});

现在,我的问题是,无论何时我必须将它部署到其他地方,并且我无法控制应用程序上下文,AJAX调用最终都会失败,因为应用程序上下文本身是在JavaScript中硬编码的

是否有任何方法可以在不必更改所有JavaScript文件中的context变量的情况下实现这一点?比如:

$.ajax({
  type: 'GET',
  url: '/api/v1/users/' + $('#user-id').val()
}).done(function (response) {
  callback({ data: response.user, binding: response.binding });
}).fail(function (jqXHR, textStatus, errorThrown) {
  callback({ jqXHR: jqXHR });
});

我在许多应用程序中多次看到这种情况,但我不明白它们是如何做到这一点的

注意:Web应用程序部署在同一WAR文件中;我希望避免试图通过在JavaScript中进行URL操作来解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    非常简单,您可以包含带有隐藏输入的上下文,例如

    <input type="hidden" id="ctx" name="ctx" value="<applciation_context_here>"/>
    

    然后在你的js中

    var context = document.getElementById("ctx").value/*getAttribute('value')*/ + api;
    


    或者更好的方法是获取当前窗口位置(路径),以及一些字符串操作来获取上下文
    更新0:

    事实:

    假设您将有/a/b/c上下文,我不知道,但通常它们将被映射到a.comb.comc.com,并且服务器将上下文标识为请求的主机,如下所示

    a.com -> local_host/a
    b.com -> local_host/b
    

    但是,如果您没有按照上面的方法进行操作,那么在生成jsp文件时,可以将上下文路径设置为隐藏输入方法