正如我在标题中已经提到的,我正在寻找一个 JS 函数来获得与使用此 PHP 代码获得的相同结果:
dirname(dirname(__FILE__))
提前致谢!
正如我在标题中已经提到的,我正在寻找一个 JS 函数来获得与使用此 PHP 代码获得的相同结果:
dirname(dirname(__FILE__))
提前致谢!
我认为这是不可能的,因为 php dirname 在本地机器上的 apache 服务器上运行。它可以访问文件系统。但是 javascript 在不能与文件系统一起操作的浏览器层上运行。我认为您应该使用 ajax 并根据需要处理结果。我认为这对你来说是最好的解决方案。
我需要一个解决方案来编写这样的代码:
$("#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 配置文件中设置)。我希望我能帮上忙。
您可以让 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 中没有类似物__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
为什么不从绝对 URL 加载您想要的内容?
如果你有你的代码块:/my/script/to/load.js
浏览器将加载正确的文件,如果你在yoursite.com
或任何类似的地方yoursite.com/a/b/c/d/e/f
有点离题,但如果你只是想获得类似的dirname($_SERVER['REQUEST_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 请求,而无需担心路径