2013-03-09 17 views
0

我有一些jQuery代碼看起來像這樣:更改後的URL爲應用程序中的jQuery

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

這是因爲當地的環境中運行時,我的應用程序的名字在我的本地環境中的所有工作正常,是myapp

然而,當我部署到測試環境中,應用程序的名稱爲mytestapp因此,此代碼不能在測試環境中工作。

如何解決此問題?我怎樣才能簡單地取出應用程序名稱?

+0

誠實,你可以使用別名 – Alexander 2013-03-09 00:13:24

回答

0

使用URL解析

var context = window.location.href.split('/')[3] 
$.post("/"+context+"/mycontroller/save", ... 

我在Rails店打工,這是一個普通的問題。這每次解決它,並在每個項目中使用。

0

添加到您的HTML:

<script> 
$(function() { 
    var baseUrl = //YourDynamicallyGeneratedBaseURL; 
}); 
</script> 

和Ajax調用會是這樣:

$.post(baseUrl + "/mycontroller/save", ... 
0

您可以使用一個<base>元件與基本URL爲您的所有相對URL。

<base href="/myapp/"> 

這樣您就可以不同地控制生產和開發環境的基本URL。

例如,你的AJAX網址將變爲:

$.post("mycontroller/save", { 
    ... 
}); 
+0

,所以我不得不改變這個,每次我部署應用程序? – birdy 2013-03-09 00:28:08

+0

@birdy,即如果你缺乏適當的環境配置 – Alexander 2013-03-09 00:33:55

0

服務器URL應該已經在你的配置中定義(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文件中的任何一箇中訪問。

0

我會避免指定基址,除非你必須(從另一個應用程序的Ajax調用)。

如果您的呼叫是從同一個應用程序,那麼你的問題應該可以很容易地通過執行以下操作解決:

$.post("${g.createLink(controller:'mycontroller', 
     action: 'save')}", 
     { myObject: JSON.stringify(jsonObject) }) 
    .done(function(data) { 
     $("#successmsg").text(data); 
     $("#successmsg").show(); 
    }); 
相關問題