3

正如我在标题中已经提到的,我正在寻找一个 JS 函数来获得与使用此 PHP 代码获得的相同结果:

dirname(dirname(__FILE__))

提前致谢!

4

7 回答 7

6

我认为这是不可能的,因为 php dirname 在本地机器上的 apache 服务器上运行。它可以访问文件系统。但是 javascript 在不能与文件系统一起操作的浏览器层上运行。我认为您应该使用 ajax 并根据需要处理结果。我认为这对你来说是最好的解决方案。

于 2012-11-03T05:14:52.790 回答
1

我需要一个解决方案来编写这样的代码:

$("#div").load(ROOT_URL + "my/path/to/script.php");

解决方案:一个 PHP 脚本生成一个包含所有需要的 JS 文件的 JS 文件,并将 ROOT_URL 添加到生成文件的顶部:

$js = 'ROOT_URL = "' . ROOT_URL . '"; ' . $js;
file_put_contents("file.js", $js);

现在我也可以在 JS 代码中使用 ROOT_URL(在 PHP 配置文件中设置)。我希望我能帮上忙。

于 2012-11-05T02:04:57.330 回答
1

您可以让 PHP 输出脚本。是的,没错,您可能无法使 php 处理 js 文件(除非您完全控制服务器)。但这没关系。只需确保在 PHP 返回的标头和脚本标记中的 MIME 类型都是正确的。这样,您可以让 PHP 在脚本中插入您想要的任何值,包括它自己的路径。

在 script.php 中:

header("Content-type: text/javascript");
echo 'var myvar = '.$something;
//where $something can be $_SERVER['REQUEST_URI'], __FILE__ or whatever you need.
//You could even use information from session variables, or query the database.
//In fact, this way you can have GET parameters in your javascript.
//Make sure you are not creating a vulnerability with the exposed information.

//Then put the rest of the script as usual. You could even include it*.

*:包括

在 HTML 中:

<script type="text/javascript" src="script.php"></script>

是的,我知道我在重复 MIME 类型,这样做可以最大限度地提高浏览器兼容性。

于 2012-11-05T02:19:01.967 回答
1

浏览器 Javascript 中没有类似物__FILE__;该代码无法直接访问加载它的 URL。但是通过某些假设,您可以弄清楚,就像这里的答案一样。

一旦你有了脚本的 URL(我假设在一个名为scriptURL下面的变量中),你就可以着手寻找祖父 URL。这对于 URL 来说可能会变得很棘手,因此在开始使用字符串处理之前,让精通 URL 的 Javascript 位为您解析 URL 并仅获取路径名组件可能是最安全的:

var a = document.createElement('a')
a.href = scriptURL
var scriptPath = a.pathname

然后不幸的是字符串操作;这是一个有点笨拙的解决方案:

var components = scriptPath.split(/\//)
while (components.length > 0 && !components[components.length-1])
    components.length -= 1;
var twoDirsUp = components.slice(0,components.length-2).join('/')

然后您可以使用反向锚元素技巧将结果转换回完整的 URL:

a.pathname = twoDirsUp;
var grandParentUrl = a.href
于 2012-11-05T02:22:15.163 回答
1

为什么不从绝对 URL 加载您想要的内容?

如果你有你的代码块:/my/script/to/load.js浏览器将加载正确的文件,如果你在yoursite.com或任何类似的地方yoursite.com/a/b/c/d/e/f

于 2012-11-05T02:23:29.397 回答
0

有点离题,但如果你只是想获得类似的dirname($_SERVER['REQUEST_URI'])javascript,你可以做

window.location.href.substr(0, window.location.href.length - window.location.href.split('/').pop().length)
于 2015-07-07T16:19:17.500 回答
0

我使用类似的东西来摆脱 javascript 中的路径

 var __DIR__ = window.location.pathname.match('(.*\/).*')[1] + 'NameOfThisFolder';

第一的

window.location.pathname.match('(.*\/).*')[1]

返回没有文件名或其他内容的当前路径。

rootFolder/folder1/folder2/

然后我添加这个文件夹的名称('NameOfThisFolder')。

通过这种方式,我可以在当前页面中从一个从 ajax 请求依次调用的页面发出例如 ajax 请求,而无需担心路径

于 2020-05-05T10:23:14.477 回答