我写了一个web应用程序,其中JS文件对其他文件进行了大量相对调用。这已经工作到这一点,但现在我使用这个js文件从页面在不同的目录,我得到错误的路径。这个web应用程序将安装在许多不同的主机上,所以我不知道绝对路径是否会起作用,因为我不知道它安装在哪里。我也不想在我的路径中使用大量前置变量来破坏js(但可能不得不这样做)。
我希望js路径是相对于js文件本身,而不是文件打开它…有没有办法在js文件中设置默认根目录?
$.ajax({
type: "POST",
url: "inc/alert.php",
success: function(msg){
if(msg){
window.location.href = 'inc/logoff.php?timeout=true';
}
}
});
这是我的文件结构,但我不知道它将被安装在哪里,或者webapp文件夹将被称为什么:
/random-folder/web-app/inc/script.js
直到现在,我所有使用js的文件都在"web-app"文件夹中…但现在我有其他页面在不同的文件夹中调用它,所有的路径都被破坏了。有办法做到这一点吗?或者至少有一种方法来获得js文件本身的路径?
不幸的是,这并不容易实现。
但是,您可以尝试在HTML文档中查找<script>
标记并解析其位置。与location.href
一起,你可以建立一个绝对的URL到脚本。
然而,因为你正在调用PHP脚本-这显然不属于JS文件夹-你的问题应该不是一个问题。AJAX调用将相对于包含脚本的文档,并且您可能知道从该文档到PHP脚本的路径。
更新:只是从不同的文件夹读取文件正在使用这些脚本。在这种情况下,如果您不想简单地手动设置包含路径的var,那么脚本标记解析技术实际上是一种方法。
您可以通过检查当前文档中<script>
标签上的src
属性来找到JS文件的路径。
<script src="/some/random/path/main.js"></script>
jQuery: var scriptFilename = 'main.js';
var rootPath = ''; // Will contain the path to your file
$('script').each(function() {
var $script = $(this);
if ($script.attr('src') && $script.attr('src').indexOf(scriptFilename) > -1) {
rootPath = $script.attr('src').split(scriptFilename)[0];
return false;
}
});
获取绝对路径是不可能的,原因有两个:
- JS在客户端运行
- JS路径总是相对于:
- HTML页面(
scripts.js
inxyz.com/test/index.php
=>xyz.com/test/scripts.js
) - 服务器文件根目录(
/scripts.js
inxyz.com/test/index.php
=>xyz.com/scripts.js
)
- HTML页面(
作为解决方案,您可能需要:
- 从PHP加载JS,例如:
<script type="text/javascript" src="scripts.php"></script>
- 或者,在加载脚本文件之前,加载与选项1相同的配置文件,例如:
<script type="text/javascript" src="config.php"></script><script type="text/javascript" src="scripts.js"></script>