在jQuery中更改应用程序的post url

时间:2013-03-09 00:10:22

标签: jquery grails web

我有一些看起来像这样的jQuery代码:

$.post("/myapp/mycontroller/save", { myObject: JSON.stringify(jsonObject) })
    .done(function(data) {
        $("#successmsg").text(data);
        $("#successmsg").show();
    });

这一切在我的本地环境中运行正常,因为在本地环境中运行时我的应用名称为myapp

但是,当我部署到测试环境时,应用程序的名称为mytestapp,因此此代码无法在测试环境中运行。

如何解决此问题?我怎样才能简单地取出应用名称?

5 个答案:

答案 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();
    });