jQuery无法正确解析相对URL

时间:2011-01-21 01:29:52

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

2 个答案:

答案 0 :(得分:1)

some有一个非常相似但与图书馆无关的答案question

这就是相对路径的工作方式。

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

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

protocol://some.domain.name/somename

如果“somename”是网络服务器将其转换为

的目录

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

供参考,请参阅RFC 1808

第4部分中的第6步

答案 1 :(得分:0)

查看$.fn.load和随后$.ajax的jQuery源代码,我找不到任何试图考虑相对路径的内容。它确实从绝对路径中提取信息,但这只是为了测试远程。话虽如此,尝试以下,看看结果是否有所不同,因为我可能错过了一些东西:

$(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;
    });
});

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