2011-08-31 100 views
2

的URL,我的開發環境是:損壞的相對URL方法

http://localhost/mysite/blah... 

我使用jQuery &的getJSON來執行我的網站上一些Ajax的動作,我指定了其正常工作的所有時間網址爲:

/mysite/controller/action 

..但是這是不理想的,因爲我不希望我的硬編碼網址的發展進入我單獨jQuery的包含文件。

當網站上線時,將控制器/操作或/控制器/操作作爲網址就可以,因爲這樣可以解決問題,但對於開發網站來說,這是不行的。

我已經試過:

controller/action 

..但這個返回404,這我感到驚訝,因爲我以爲缺少/在網址前面將阻止在看網站根目錄。

必須有一個簡潔的解決方案呢?

回答

4

我會在我的HTML頁眉插入一個全局常量做到這一點:

<script type="text/javascript"> 
    var BASE_URL = '/mysite/'; 
</script> 

這將從您的服務器插入,以便它可以動態更改。 在你的腳本之後,你就可以做出與(這裏jQuery的風格)AJAX請求:

$.ajax(BASE_URL + '/controller/action', ...); 
1

如果您在

/mysite/controller/action 

那麼正確的相對路徑是到

/mysite/some_other_controller/some_other_action 

../../some_other_controller/some_other/action 
+1

不幸的是,它並不總是會從相同的路徑調用,所以雖然../../在某些領域會起作用,但在其他領域會失敗。 – marcusstarnes

0

您可以使用此代碼來獲取的.js腳本的電流路徑,並用它來計算你的相對路徑。

var url; 
$("script").each(function() { 
     if ($(this).attr("src").indexOf("[YOUR_SCRIPT_NAME.JS]") > 0) { 
       url = $(this).attr("src"); 
       url = url.substr(0, url.lastIndexOf("/")); 
       return false; 
     } 
}); 
var final_url = url + "/your_target_script.js" 

將YOUR_SCRIPT_NAME替換爲腳本的唯一名稱。