相当于PHP';JavaScript中的dirname(_文件__)?

相当于PHP';JavaScript中的dirname(_文件__)?,php,javascript,dirname,Php,Javascript,Dirname,正如我在标题中已经提到的,我正在寻找一个JS函数来获得与PHP代码相同的结果: dirname(dirname(__FILE__)) 提前谢谢 我认为这是不可能的,因为php dirname在本地机器上的apache服务器上运行。它可以访问文件系统。但是javascript是在浏览器层上运行的,而浏览器层不能与文件系统一起运行。我认为您应该使用ajax,并根据需要使用ProcessResult。我想这是你最好的解决办法 我需要一个解决方案来编写这样的代码: $("#div").load(ROO

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

dirname(dirname(__FILE__))

提前谢谢

我认为这是不可能的,因为php dirname在本地机器上的apache服务器上运行。它可以访问文件系统。但是javascript是在浏览器层上运行的,而浏览器层不能与文件系统一起运行。我认为您应该使用ajax,并根据需要使用ProcessResult。我想这是你最好的解决办法

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

$("#div").load(ROOT_URL + "my/path/to/script.php");
解决方案:PHP脚本生成一个包含所有所需JS文件的JS文件,并将根URL添加到生成文件的顶部:

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

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

您可以让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类型,这样做是为了最大限度地提高浏览器的兼容性。

浏览器Javascript中没有类似的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuucode>;代码无法直接访问加载它的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

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


如果您插入了代码块:
/my/script/to/load.js
如果您在
yoursite.com
或类似的
yoursite.com/a/b/c/d/e/f
中,浏览器将加载正确的文件,但如果您只想获得类似的
dirname($\u SERVER['REQUEST\u URI')
,用于javascript,你能行

window.location.href.substr(0, window.location.href.length - window.location.href.split('/').pop().length)

我使用类似的方法来摆脱javascript中的路径

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

window.location.pathname.match('(.*\/).*')[1]
返回不带文件名或其他内容的当前路径

rootFolder/folder1/folder2/
然后我添加这个文件夹的名称('NameOfThisFolder')


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

您希望获得的第二个父目录是什么?HTML文件?javascript代码在哪里?用户文件系统上的文件?为什么?它不可用。。。至少在PHP中不是这样。@lan:我想获取文件的路径,因为我需要变量“root\u dir”。在PHP中,我是这样做的:定义(“ROOT_DIR”,dirname(dirname(FILE)).DIRECTORY_SEPARATOR);好的,我可以问你为什么需要它吗?不幸的是没有。我使用未知/动态深度的重写URL(domain.com/controller/action/arg1/arg2/arg3/…)。对于JS,它看起来像是在文件夹“arg3”中。这就是为什么我需要绝对URL来修复它。如果您有其他解决方案,请告诉我!:-)@夸夸其谈先生你有网站/测试网站吗?