2014-10-01 46 views
1

好的,所以我有一些Javascript與URL重寫一起運行;所以如果我使用相對URL,它會從錯誤的地方加載內容。在Javascript/PHP中處理絕對URL的正確方法?

例如我在myfunctions.js這個功能:

function loadXMLDoc(url,cfunc) {... 

如果我從test.com/a/b/c傳遞一個相對URL就會相對含量加載到test.com/a/b/c而非test.com

我明顯可以使用絕對URL來解決這個問題,但是我需要這個在測試服務器和活動服務器上工作。

PHP中的當前我使用一個函數來獲取基礎URL並將其替換爲絕對URL。

所以在PHP中,我有:

//On the test server I run: 
define('BASE_URL', 'http://localhost/location/to/www/root'); 

//And on the live server I run: 
define('BASE_URL', 'http://www.test.com/'); 

然後我用這在我的PHP絕對加載圖像,CSS等;這使我可以在測試服務器和活動服務器上使用相同的代碼。

我的問題是;這裏有什麼正確的解決方案?我應該使用類似於我的PHP形式的絕對URL的Javascript函數嗎?或者是否有可能將這個PHP定義傳遞給.js文件?

甚至可能有一個重寫標誌,告訴瀏覽器忽略url中的相對位置,並從根www位置加載;但我找不到任何東西。

任何想法?

+0

抓住當前的URL,修剪它,加入A/B/C – starvator 2014-10-01 13:21:12

+0

@starvator:它修剪到究竟是什麼?如果該網站在虛擬目錄中,根目錄可能是'http:// www.domain.com/approot /':) – 2014-10-01 13:22:55

+0

也許你需要使用一個變量$ isLive = false;然後用if($ isLive){define('base_url','url-live')來檢查它。 } else {define('base_url','url-test'); } – Carca 2014-10-01 14:14:38

回答

2

只是定義在共同文件(header.php文件): -

<script> var baseUrl = '<?php echo BASE_URL;?>';</script> 

,幷包括所有的JS把下面這段代碼和訪問該變種使用。

+1

好吧。我覺得很愚蠢。 :p – user3420034 2014-10-01 13:12:09

+0

+1首先使用此解決方案:) – 2014-10-01 14:37:04

0

每當我在測試vs live上開發時,我只使用「/css/location/cssfile.css」(這適用於任何文件),這樣我就不必修改任何東西。

然後當我的HTML加載時,它會從正確的位置調用。以上翻譯成:

/css/location/file.name

肯做工作:

http://localhost/location/to/www/root/css/location/cssfile.css 

http://test.com/css/location/cssfile.css 

這將爲50位工作

http://localhost/location/to/www/root 
http://localhost/location/to/www/testsite1 
http://localhost/location/to/www/testsite2 
http://localhost/location/to/www/testsite3 

etc

+1

問題是我有幾十個網站在我的測試服務器上運行;所以www不能設置爲特定的網站。 :-( – user3420034 2014-10-01 13:11:25

+0

你不必如我所說,用「/ where/my/file/is」代替完全絕對路徑,你可以針對每個站點進行開發,而無需實際編碼! – user3036342 2014-10-01 13:12:46

+1

是的,但是測試服務器上的www目錄與實時網站不同,所以它不會從同一位置加載? – user3420034 2014-10-01 13:13:50

2

包括標籤後,請使用以下內容。但請記住,你將無法使用該變量的外部

<script> 
    var siteBaseURL = '<?php echo BASE_URL;?>'; 
</script> 

因爲,PHP將ECHO任何服務器端價值,並將其發送的HTML,那麼PHP將發送BASE_URL和這樣的HTML與JavaScript將包括在瀏覽器。

但在任何外部JS文件,如說

<script src="example.js"/> Here you wont be able to access the above variable. 
+0

重新提出您的第二條評論:如果變量在全局名稱空間中聲明,您將可以使用'window.siteBaseURL'從任何腳本訪問它。 – 2014-10-01 13:20:46

+0

@TrueBlueAussie,是的。我不得不說,如果他將其定義爲特定範圍,那麼問題就會發生 – 2014-10-01 13:24:19

+0

我認爲這只是它措辭的方式而讓我困惑:) – 2014-10-01 13:29:43

相關問題