jQuery无法正确解析相对URL

我正在使用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”,其中绑定了点击侦听器的链接所在的位置,然后单击链接我收到404错误。 发生这种情况是因为AJAX请求使用URL“http:// localhost:3000 / entities / settings.js”而不是(我将要求)“http:// localhost:3000 / entities / 3 / settings.js”。

有一个非常相似但与图书馆无关的问题有一个答案:

这就是相对路径应该如何工作的方式。

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

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

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

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

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

您还可以指定主机名“//another.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/

供参考,请参阅RFC 1808第4节中的步骤6

通过$.fn.load的jQuery源代码和随后的$.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; }); }); 

我的猜测是,这可能是特定于浏览器的问题。