在 JavaScript 中进行 AJAX 请求时,是否有必要编写
window.location.protocol + '//' + window.location.host
而不是简单地
/
毕竟,图像、脚本和 css 等文件始终是相对指定的,因此在发出 ajax 请求时应该是相同的。
我问这个的原因是因为我找不到任何关于如何做的官方建议(例如来自 w3c)。
在 JavaScript 中进行 AJAX 请求时,是否有必要编写
window.location.protocol + '//' + window.location.host
而不是简单地
/
毕竟,图像、脚本和 css 等文件始终是相对指定的,因此在发出 ajax 请求时应该是相同的。
我问这个的原因是因为我找不到任何关于如何做的官方建议(例如来自 w3c)。
它们并不完全相同,因为window.location.protocol + '//' + window.location.host
缺少用于指示根目录的斜杠。但出于所有意图和目的,它们可以互换使用。
在实际使用中,假设您不使用<base>
,以下所有内容都将指向同一个地方:
window.location.protocol + '//' + window.location.host + '/'
window.location.href
'//' + window.location.host + '/' //useful if you don't know the scheme and don't want to check
'/'
window.location.host
如果端口号不是 80,则包含端口号,因此您不必担心包含该端口号。写起来更简单,更清晰'/'
,因为它总是意味着“这个页面来自哪个服务器的根目录”。如果 URI 包含类似的内容,事情可能会变得棘手username:password@
——我不知道使用 JS 获取该数据的方法。如果将代码迁移到这样的不寻常环境,尝试从各个组件重新组装 URI 可能会导致问题。
所有这一切的正式定义都在RFC3986中,这并不完全是简单的阅读。
我只能提出一个区别:如果您<base />
的 HTML 文档中有标签,AJAX(至少 jQuery 会)似乎会考虑这个标签并更改您的 URL。
在任何其他情况下,两者的行为应该相同。<base>
无论如何你都应该避免。
<head>
<title>untitled</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<base href="http://example.com/foo/" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script>$.get("/bar");</script>
</head>
<body>
<a href="#">Base test</a>
</body>
</html>
我很确定它们的意思完全相同,但老实说,我建议只使用/
. 仅仅是因为它是一个原始字符串,而不是Object->Object->string + string + Object->Object->script
如果这有意义。