1

我有以下要构建的网址,

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/

有什么建议么?

4

1 回答 1

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 的协议和域。在您的实时站点上,这 2 个匹配,但如果您的应用程序位于子文件夹myweb中(如本地主机上的文件夹),这将失败。

您需要以某种方式识别应用程序 URL(应用程序的 URL 根)。

问题在于,仅通过检查 URL,javascript 无法判断您的应用程序所在的位置。

假设您将站点部署到:http://localhost/myweb/site1/

您将拥有以下网址:http://localhost/myweb/site1/cart/index.php

Javascript 可以用斜杠 ( ) 分割你的 URL,/但它现在无法知道它应该选择多少个子文件夹。例如,应用程序根目录上方的 URL 可以是以下任何一种:http://localhost/, http://localhost/myweb/, http://localhost/myweb/site1/, http://localhost/myweb/site1/cart/.

通过另一种方法(我首先建议),您可以删除 URL 的末尾(在您的情况下是cart/index.php部分)。这仅在您的 URL 结构非常严格的情况下才有效,因此执行此脚本的所有页面都位于一个子文件夹中。

因此它将在以下 URL:http://localhost/myweb/site1/gallery/old/index.php或类似的 URL 上中断。

最好的选择是将其设置为一个单独的文件中的“配置变量”,您可以在它部署到的每个位置上对其进行编辑。

$appRoot = "http://localhost/myweb/"可以作为生成 javascript的 PHP 变量 ( )。

或者更简单地说是一个 javascript 变量 ( var appRoot = 'http://localhost/myweb/')。制作一个单独的 js 文件,将其命名为config.js,将上面的行添加到其中并在其他 javascripts 之前引用它。

于 2013-04-15T06:20:49.510 回答