我有一堆静态 javascript 文件来处理 AJAX 函数来查询我的应用程序的各个部分,并且我部署了我的应用程序的多个版本,所以我可能有一些类似的东西:
https://www.myurl.com/projectName/ - production release
https://www.myurl.com/projectName_alpha/ - current alpha release
https://www.myurl.com/projectName_beta/ - current beta release
https://www.myurl.com/projectName_unstable/ - current development build
因此,如果我有一个想要进行 AJAX 调用的控制器“foo”,我不能硬编码/projectName/foo
为 URL(因为它总是指向生产版本)。目前,我将一个脚本注入到我的每个视图中,该脚本将项目的基本 URL 作为全局变量:
<script type="text/javascript">
// declare a global variable to hold the project's base URL
var baseUrl = '<spring:url value="/" />';
</script>
然后在 javascript 文件中引用它:
var url = baseUrl + 'foo/';
它是功能性的,但是一个丑陋的解决方案,如果可以避免的话,我宁愿不污染全局命名空间。有没有人对我如何实施更好的解决方法有任何建议?
澄清一下:该解决方案应该适用于任何类型的请求,无论它是否基于 AJAX - 调用window.open
、设置标签的src
属性<img>
以及对控制器进行 AJAX 调用都应该适用于该解决方案。无论基本 URL 是什么或它有多少层,它也应该适用,例如:
https://www.myurl.com/
https://www.myurl.com/projectName/
https://www.myurl.com/projectName_alpha/1.2.3/
都应该被正确检测到。