正如我在标题中已经提到的,我正在寻找一个JS函数来获得与我使用这个PHP代码相同的结果:
dirname(dirname(__FILE__))
提前致谢!
答案 0 :(得分:6)
我不认为这是可能的,因为php dirname在本地机器上的apache服务器上运行。它可以访问文件系统。但javascript在浏览器层上运行,无法与文件系统一起运行。我想你应该如何使用ajax和proccess结果。我认为这是最好的解决方案。
答案 1 :(得分: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配置文件中设置)。我希望我能提供帮助。
答案 2 :(得分:1)
您可以让PHP输出脚本。是的,没错,你可能无法制作php进程js文件(除非你完全控制服务器)。但没关系。只需确保MIME类型正确,在PHP返回的标头和脚本标记中都是如此。这样,您就可以让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*.
*:include
在HTML中:
<script type="text/javascript" src="script.php"></script>
是的,我知道我正在重复MIME类型,这样做是为了最大化浏览器兼容性。
答案 3 :(得分:1)
浏览器Javascript中没有__FILE__
的类似物;代码无法直接访问加载它的URL。但是在某些假设下你可以弄明白,如答案here。
获得脚本的URL后(我假设在下面名为scriptURL
的变量中),您可以设置查找祖父级URL。对于URL来说这可能会变得棘手,因此在开始使用字符串修改之前,让Javascript的URL精明部分为您解析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
答案 4 :(得分:0)
为什么不从绝对网址加载你想要的内容?
如果你的代码块不对:/my/script/to/load.js
浏览器会在yoursite.com
或yoursite.com/a/b/c/d/e/f
答案 5 :(得分:0)
有点偏离主题,但是如果你只想获得javascript的dirname($_SERVER['REQUEST_URI'])
类似,你可以做到
window.location.href.substr(0, window.location.href.length - window.location.href.split('/').pop().length)
答案 6 :(得分:0)
我使用类似的方法来释放javascript中的路径
var __DIR__ = window.location.pathname.match('(.*\/).*')[1] + 'NameOfThisFolder';
第一
window.location.pathname.match('(.*\/).*')[1]
返回当前路径,不包含文件名或其他内容。
rootFolder/folder1/folder2/
然后添加此文件夹的名称('NameOfThisFolder')。
通过这种方式,我可以在从ajax请求依次调用的页面的当前页面中进行ajax请求,而无需担心路径