我有一些看起来像这样的jQuery代码:
$.post("/myapp/mycontroller/save", { myObject: JSON.stringify(jsonObject) })
.done(function(data) {
$("#successmsg").text(data);
$("#successmsg").show();
});
这一切在我的本地环境中运行正常,因为在本地环境中运行时我的应用名称为myapp
但是,当我部署到测试环境时,应用程序的名称为mytestapp
,因此此代码无法在测试环境中运行。
如何解决此问题?我怎样才能简单地取出应用名称?
答案 0 :(得分:0)
使用网址解析
var context = window.location.href.split('/')[3]
$.post("/"+context+"/mycontroller/save", ...
我在铁路商店工作,这是一个常见的问题。这样每次都能解决它,并在每个项目中使用。
答案 1 :(得分:0)
将此添加到您的html:
<script>
$(function() {
var baseUrl = //YourDynamicallyGeneratedBaseURL;
});
</script>
和Ajax调用就像:
$.post(baseUrl + "/mycontroller/save", ...
答案 2 :(得分:0)
您可以将<base>
元素与所有相对网址的基本网址结合使用。
<base href="/myapp/">
通过这种方式,您可以以不同方式控制生产和开发环境的基本URL。
例如,您的AJAX URL将变为:
$.post("mycontroller/save", {
...
});
答案 3 :(得分:0)
您的服务器网址应该已在您的配置中定义(grails-app/conf/Config.groovy
,除非您已更改):
grails.serverURL = "http://localhost:8080/myapp"
然后在您的布局中(默认情况下,主要布局为grails-app/views/layouts/main.gsp
)
<g:javascript>var baseURL = '${grailsApplication.config.grails.serverURL}';</g:javascript>
然后可以在任何baseURL
文件中访问.js
。
答案 4 :(得分:0)
我会避免指定基本网址,除非你必须(从其他应用程序调用Ajax)。
如果您的电话来自同一个应用程序,那么您应该通过以下方式轻松解决问题:
$.post("${g.createLink(controller:'mycontroller',
action: 'save')}",
{ myObject: JSON.stringify(jsonObject) })
.done(function(data) {
$("#successmsg").text(data);
$("#successmsg").show();
});