javascript AJAX 请求中的相对URL

0dxa2lsx  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(110)

为什么Javascript对待相对URL的方式与标准HTML不同?请考虑以下URL(或直接浏览到它):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,在哪里也会发生这种情况。我希望这个更独立于库的问题能得到更好的答案。)

pjngdqdw

pjngdqdw1#

(更新后可读性更强)
这就是相对路径的工作原理。
假设当前地址为:

  • 绝对值:* x1月1x

如果你只指定了一个新文件名“foo”,你会得到相同的协议,主机和目录,只是文件名被改变了:

  • 相对值:* foo
  • 绝对值:* protocol://some.domain.name/dir1/dir2/foo

如果您指定完整路径“/dir 3/filename 2”,则会获得相同的协议和主机名,但路径不同:

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

更新

正如cameron在评论中所说:有关参考,请参见RFC 1808第4节中的步骤6

cqoc49vn

cqoc49vn2#

http://code.google.com/p/js-uri/似乎是URL操作的首选库,尤其是这种类型的绝对到相对计算:

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

相关问题