在JavaScript中执行AJAX请求时,是否有必要编写
window.location.protocol + '//' + window.location.host
而不是简单
/
毕竟,图像,脚本和css等文件总是相对指定的,所以在发出ajax请求时应该是相同的。
我之所以这样问是因为我找不到任何关于如何做的官方建议(例如来自w3c)。
答案 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
,如果这是有道理的。