相对URL没有得到正确解决由jQuery
我正在构建一个Rails(3.0.3)应用程序与一些JavaScript使用jQuery(1.4.4)。在其中一个网站上,我添加了点击事件监听器,并希望使用AJAX请求加载一些内容。相对URL没有得到正确解决由jQuery
$(document).ready(function() {
$("a#settings").click(function() {
$("div#box").load("settings.js");
return false;
});
});
现在当我打开站点“http://本地主机:3000 /实体/ 3”,其中与结合的点击收听链接位于并点击我得到一个404错误的链接。发生这种情况是因为AJAX请求使用URL“http:// localhost:3000/entities/settings.js”而不是(我会执行的)“http:// localhost:3000/entities/3/settings.js”。
这是相对路径应该是怎样工作的。
protocol://some.domain.name/dir1/dir2/filename
如果只指定一个新的文件名“富”,你会得到相同的协议,主机和显示目录,只有文件名改为:
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指向一个目录而不是一个文件,webserver内部可以在url的末尾添加一个/。
如果 “somename” 是目录的网络服务器转换它到
protocol://some.domain.name/somename/
为了参考,见步骤6中的RFC 1808
通过查看的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;
});
});
我的猜测是,这可能是一个特定的浏览器的问题。
它发生铬和Firefox根据第4 。我只是尝试在不同的页面(也是你的脚本)。它总是试图连接更高的一条路径。例如。 localhost/users/kai,然后它尝试从本地主机/用户获取。 URL的最后部分总是被删除。 – Zardoz 2011-01-21 02:00:47