Javascript jQuery无法正确解析相对URL

Javascript jQuery无法正确解析相对URL,javascript,jquery,url,relative-path,Javascript,Jquery,Url,Relative Path,我正在使用jQuery(1.4.4)使用一些JavaScript构建一个Rails(3.0.3)应用程序。在其中一个站点上,我添加了一个click事件监听器,并希望使用AJAX请求加载一些内容 $(document).ready(function() { $("a#settings").click(function() { $("div#box").load("settings.js"); return false; }); }); 当我现在打开网站时“http://l

我正在使用jQuery(1.4.4)使用一些JavaScript构建一个Rails(3.0.3)应用程序。在其中一个站点上,我添加了一个click事件监听器,并希望使用AJAX请求加载一些内容

$(document).ready(function() {
  $("a#settings").click(function() {
    $("div#box").load("settings.js");
    return false;
  });
});

当我现在打开网站时“http://localhost:3000/entities/3“带有绑定的click listener的链接位于何处,单击该链接我会得到404错误。这是因为AJAX请求使用URL“http://localhost:3000/entities/settings.js“而不是(如我所愿)”http://localhost:3000/entities/3/settings.js“

在jQuery源代码中查找
$.fn.load
以及随后的
$.ajax
,我找不到任何试图解释相对路径的内容。它确实从绝对路径中提取信息片段,但这只是为了测试远程性。尽管如此,请尝试以下方法,看看结果是否有所不同,因为我可能遗漏了一些内容:

$(document).ready(function() {
    $("#settings").click(function() {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "settings.js", true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4) {
                $('#box').html(xhr.responseText);
            }
        };
        xhr.send(null);
        return false;
    });
});
我猜这可能是一个特定于浏览器的问题

有一个非常相似但与库无关的答案:

这就是相对路径的工作原理

protocol://some.domain.name/dir1/dir2/filename

如果仅指定新文件名“foo”,则会得到相同的协议、主机和目录,仅更改文件名:

protocol://some.domain.name/dir1/dir2/foo

如果指定一个完整路径“/dir3/filename2”,则会获得相同的协议和主机名,但使用另一个路径:

protocol://some.domain.name/dir3/filename2

您还可以指定主机名“//other.domain.name/dir5/filename3”,并获得相同的协议,但另一个主机、目录和文件名:

protocol://another.domain.name/dir5/filename3

可能令人困惑的是,如果指定的url指向目录而不是文件,则Web服务器内部可以在url的末尾添加/

protocol://some.domain.name/somename

如果“somename”是Web服务器将其转换为的目录

protocol://some.domain.name/somename/


有关参考信息,请参见第4节的步骤6,它发生在Chrome和Firefox下。我只是在不同的页面上尝试过(还有你的脚本)。它总是试图连接一条更高的路径。例如localhost/users/kai,然后它尝试从localhost/users获取。URL的最后一部分总是被删除。如果我的脚本不起作用,就我所知这是浏览器的问题。你能试着用斜杠(
/3/
)进入页面吗?我不认为这有什么关系,但我对这类事情不是最有经验的。事实上,当URL有一个尾随斜杠时,它是有效的。但它曾经在没有尾随斜杠的情况下工作过(据我记忆所及)。会发生什么事?它似乎影响了我系统上的所有浏览器(Chrome、FF3、Opera)。它可能将
3
视为同一目录中的文件,因此它试图将
settings.js
解析为与
3
位于同一目录中。但是当您使用尾随斜杠时,它会看到
3/
,因此它知道它是一个目录,并正确地将
settings.js
解析为
3/
中的内容。好的,但是我能做些什么来解决这个问题呢?我不想以某种方式重写我所有的URL以使用尾部斜杠。人们通常如何在AJAX请求中使用url?