3

在 JavaScript 中进行 AJAX 请求时,是否有必要编写

window.location.protocol + '//' + window.location.host

而不是简单地

/

毕竟,图像、脚本和 css 等文件始终是相对指定的,因此在发出 ajax 请求时应该是相同的。

我问这个的原因是因为我找不到任何关于如何做的官方建议(例如来自 w3c)。

4

3 回答 3

5

它们并不完全相同,因为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中,这并不完全是简单的阅读。

于 2012-10-02T12:13:15.960 回答
1

我只能提出一个区别:如果您<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>
于 2012-10-02T12:18:33.693 回答
0

我很确定它们的意思完全相同,但老实说,我建议只使用/. 仅仅是因为它是一个原始字符串,而不是Object->Object->string + string + Object->Object->script如果这有意义。

于 2012-10-02T11:38:29.140 回答