2013-04-15 51 views
1

我有以下鏈接可用於構築,Java腳本獲得本地主機+ htdocs文件夾

http://localhost/myweb/cart/index.php 

我想要得到的http://localhost/myweb/位動態構建。

要做到這一點對我的直播網站,這是http://www.myweb.com/cart/index.php我可以使用下面的JavaScript代碼,

var http = location.protocol; 
var slashes = http.concat("//"); 
var host = slashes.concat(window.location.hostname); 

但我怎麼得到我的開發環境中工作,因爲它有http://localhost/myweb/?如果我運行上面的代碼,它只會給我http://localhost/

有什麼建議嗎?

+0

爲什麼你需要這樣做? – Blender

+0

因爲我在我的js文件中有很多位置,但是如果我將它們更改爲硬編碼的「myweb /」位,我必須恢復它以將其放入實時並在將代碼提交到SVN之前,反之亦然 – Thanu

+2

你的JS看起來像這裏的問題。你爲什麼不使用相對路徑? – Blender

回答

3

window.location.pathname是你搜索的東西。

我建議您閱讀window.location的MDN說明。像MDN中的其他內容一樣,這也非常簡單明瞭。

如果您知道該URL在末端您可以將不必要的index.html部分:

var path = window.location.pathname.split('/'); 
path.pop(); 
path.join('/'); 

,或者你可以切片它(因爲它通常更快):

path.slice(0,path.lastIndexOf('/')+1) 

 


編輯

看到你的新問題我可以說,你想要的東西只能通過當前的URL不能一致和安全地完成。

您需要http://localhost/myweb/部分,它是應用程序的URL根目錄。在JavaScript中,你可以獲得URL的協議和域名。在您的現場,這兩個匹配,但如果您的應用程序駐留在一個子文件夾中(如本地主機上的myweb文件夾),則會失敗。

您需要的是以某種方式識別應用程序URL(您的應用程序的URL根目錄)。

問題是,只通過檢查URL,JavaScript無法知道您的應用程序駐留在哪裏。

比方說,你部署你的網站:http://localhost/myweb/site1/

您將有以下網址:http://localhost/myweb/site1/cart/index.php

的Javascript可以用斜線(/)劃分的URL,但它沒有nowing多少子文件夾的方式它應該選擇。例如,從您的應用程序根目錄上面的URL可以是以下任何一個:http://localhost/,http://localhost/myweb/,http://localhost/myweb/site1/,http://localhost/myweb/site1/cart/

通過其他方法(我先建議),您可以放棄URL的末尾(在您的案例中cart/index.php部分)。這隻有在你的URL結構非常嚴格時纔會起作用,所以這個腳本執行的所有頁面都駐留在一個子文件夾中。

因此它會在以下網址中突破:http://localhost/myweb/site1/gallery/old/index.php或類似。

您的最好的選擇可能會讓它成爲一個單獨的文件中的「配置變量」,您可以在它被部署到的每個位置進行編輯。

作爲一個PHP變量($appRoot = "http://localhost/myweb/"),您可以使用它生成JavaScript。

或者更簡單的一個javascript變量(var appRoot = 'http://localhost/myweb/')。製作一個單獨的js文件,將其命名爲config.js,將上面的行添加到它並在其他javascripts之前引用它。

+0

window.location.pathname不會工作,但我編輯我的問題更清楚。 Thanx反正 – Thanu

+0

請檢查我的編輯,看看它是否適合您的需求。 – SoonDead

+0

我正在看的解決方案應該是在現場和開發環境中工作,不幸的是,這隻會在我的本地開發工作。如果我在現場直播它會制動網址。 – Thanu