繁体   English   中英

AJAX请求中的相对URL

[英]Relative URLs in AJAX requests

为什么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库有助于克服此问题?

(之前我问了一个类似的问题 ,但更多的是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


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

相对: //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/


UPDATE

正如Cameron在评论中所说:作为参考,请参阅RFC 1808第4节中的步骤6

看起来http://code.google.com/p/js-uri/通常是URL操作的首选库,特别是这种类型的绝对相对计算:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM