为什么Javascript处理相对URL的方式与标准HTML不同?想想以下网址(或只是浏览它):http://en.wikipedia.org/wiki/Rome。 打开Firebug控制台(或其他Javascript控制台)并输入以下内容:
var x = new XMLHttpRequest();
x.open("GET", "foo", true);
x.send("bar");
在我的系统下,请求被发送到“http://en.wikipedia.org/wiki/foo”。 URL中的“罗马”只是被忽略了。 URL中包含尾部斜杠的相同请求(“http://en.wikipedia.org/wiki/Rome/”)将“foo”附加到完整的URL。
这似乎很难在Javascript中编码正确的URL。是否有任何Javascript库可以帮助解决这个问题?
(之前我问了一个类似的question,但更多的jQuery具体,这也发生了。我希望通过这个更多的独立于库的问题得到更好的答案。)
答案 0 :(得分:55)
(更新以使其更具可读性)
这就是相对路径的工作方式。
假装当前地址是这样的:
绝对: protocol://some.domain.name/dir1/dir2/filename
如果只指定一个新文件名“foo”,则会获得相同的协议,主机和目录,只会更改文件名:
相对: foo
绝对: protocol://some.domain.name/dir1/dir2/foo
如果指定整个路径“/ dir3 / filename2”,则会获得相同的协议和主机名,但使用其他路径:
相对: /dir3/filename2
绝对: protocol://some.domain.name/dir3/filename2
您还可以指定主机名“//another.domain.name/dir5/filename3”并获得相同的协议,但另一个主机,目录和文件名:
相对: //another.domain.name/dir5/filename3
绝对: protocol://another.domain.name/dir5/filename3
可能令人困惑的是,如果指定的网址指向目录而不是文件,网络服务器内部可以在网址末尾添加/。
protocol://some.domain.name/somename
如果“somename”是一个目录,网络服务器可能会将其转换为(可能通过重定向)
protocol://some.domain.name/somename/
<强>更新强>
第4部分中的第6步答案 1 :(得分:0)
看起来http://code.google.com/p/js-uri/通常是URL操作的首选库,特别是这种类型的绝对相对计算:
new URI(potentiallyRelativeLink).resolve(new URI(window.location.href)).toString()