正如我在标题中已经提到的那样,我正在寻找一个可以获得相同结果的JS功能,就像我使用此PHP代码一样:
dirname(dirname(__FILE__))
预先感谢!
我认为这是不可能的,因为php dirname在本地计算机上的apache服务器上操作。它可以访问文件系统。但是JavaScript在无法使用文件系统操作的浏览器层上操作。我认为您应该使用Ajax和Proccess结果。我认为这是最适合您的解决方案。
我需要一个解决方案来编写这样的代码:
$("#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 Process 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*.
*:包括
在html中:
<script type="text/javascript" src="script.php"></script>
是的,我知道我正在重复MIME类型,这样做以使浏览器兼容最大化。
在浏览器JavaScript中没有__FILE__
的类似物;该代码无法直接访问加载其加载的URL。但是,有了某些假设,您可以像在此处的答案中弄清楚。
拥有脚本的URL(我假设在下面称为scriptURL
的变量中)后,您就可以设置寻找祖父母URL。对于URL,这可能会变得很棘手,因此,让JavaScript解析URL的URL位为您的URL并获得pathName组件之前,可能是最安全的,然后才能开始使用string-munging:
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加载您想要的东西?
如果您的代码块INSE:/my/script/to/load.js
浏览器将加载正确的文件,如果您在yoursite.com
中或任何类似yoursite.com/a/b/c/d/e/f
有点偏离主题,但是如果您只想获得JavaScript的dirname($_SERVER['REQUEST_URI'])
,则可以做
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/
然后,我添加了此文件夹的名称('nameOfTholder')。
以这种方式,我可以从当前页面中的Ajax请求从Ajax请求依次调用的页面中,而不必担心路径