“/”是否等于“window.location.protocol +'//'+ window.location.host”

时间:2012-10-02 11:05:53

标签: javascript ajax

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

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

而不是简单

/

毕竟,图像,脚本和css等文件总是相对指定的,所以在发出ajax请求时应该是相同的。

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

3 个答案:

答案 0 :(得分: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,这并不是简单的阅读。

答案 1 :(得分:1)

我只能提出一个区别:如果HTML文档中有<base />标记,AJAX(至少jQuery会这样做)似乎会考虑此标记并更改您的网址。

在任何其他情况下,两者应该表现相同。无论如何你应该避免使用<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>

答案 2 :(得分:0)

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