[英]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
看起来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.