Javascript AJAX请求中的相对url

Javascript AJAX请求中的相对url,javascript,ajax,url,Javascript,Ajax,Url,为什么Javascript对待相对URL的方式不同于标准HTML?想想下面的URL(或者直接浏览到它):。 打开Firebug控制台(或其他Javascript控制台)并输入以下内容: var x = new XMLHttpRequest(); x.open("GET", "foo", true); x.send("bar"); 在我的系统下,请求被发送到“”。URL中的“罗马”被忽略。URL中带有尾随斜杠(“”)的相同请求将“foo”附加到完整URL 这似乎使得在Javascript中编码正

为什么Javascript对待相对URL的方式不同于标准HTML?想想下面的URL(或者直接浏览到它):。 打开Firebug控制台(或其他Javascript控制台)并输入以下内容:

var x = new XMLHttpRequest();
x.open("GET", "foo", true);
x.send("bar");
在我的系统下,请求被发送到“”。URL中的“罗马”被忽略。URL中带有尾随斜杠(“”)的相同请求将“foo”附加到完整URL

这似乎使得在Javascript中编码正确的URL变得非常困难。有没有Javascript库可以帮助克服这个问题

(我以前问过一个类似的问题,但更具体的是jQuery,在哪里也会发生这种情况。我希望我能从这个与库无关的问题中得到更好的答案。)

(更新以使其更具可读性)

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

假设当前地址是:

绝对:
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


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

相对:
//另一个.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。看起来,这是URL操作的首选库,尤其是这种类型的绝对到相对计算:

new URI(potentiallyRelativeLink).resolve(new URI(window.location.href)).toString()

@Zardoz你能把这个链接贴到其他类似的问题上吗?当然。。。我还编辑了这个问题的链接:@Zardoz链接的工作方式也一样。如果页面URL为hxxp://en.wikipedia.org/wiki/Rome 页面上有一个锚定:
,然后单击链接将打开此URL:hxxp://en.wikipedia.org/wiki/fooUuups,你说得对。。。似乎我只是被Rails宠爱了一番,很长一段时间都没有自己编写链接。我会编辑我的问题,这样它仍然会有一些价值。我只是在Chrome的控制台上做的,效果很好。