JS中进行fetch等网络请求时的url相对路径是基于引入js的html的url地址,还是基于发起fetch的JS的url地址呢?

JS中进行fetch等网络请求时的url相对路径是基于引入js的html的url地址,还是基于发起fetch的JS的url地址呢?// 说实话,两种情况我都遇到过。感觉理论上html中引入js,js的中发起请求的应该是基于html页面的url地址的。但是我明确见过有相对js的url地址,是js的引入方式不一样吗?

喜欢这个问题 | 分享 | 新建回答

回答

东方不败

May 6, 2024
1 赞

首先看一个错误的回答:

在JavaScript中,进行fetch等网络请求时使用的URL相对路径的解析基础取决于该JavaScript代码是如何被执行的。具体来说,有两种情况:

内联JavaScript:如果JavaScript代码是直接写在HTML页面中的<script>标签内,那么相对路径是基于当前HTML页面的URL。

外部JavaScript文件:如果JavaScript代码是从一个外部文件引入的(比如通过<script src="path/to/script.js"></script>),那么相对路径是基于该外部JavaScript文件的URL,而不是引入该脚本的HTML页面的URL。

以上是来源于AI助手的一个回答。

具体可以本地写一个html文件和js文件测试一下。测试完以后,发现不对。

重新问别的AI助手,回答如下:

在JavaScript中,当你使用fetch或其他网络请求API(如XMLHttpRequest)来发起请求时,相对URL的解析通常是基于当前页面的URL(也就是包含你的JavaScript的HTML页面的URL),而不是基于JavaScript文件本身的URL。

这是因为在浏览器环境中,JavaScript代码是在HTML文档的上下文中执行的,所以相对URL会被解析为相对于该HTML文档的URL。JavaScript文件的引入方式(例如通过<script src="...">标签或模块导入)并不会改变这一点。

然而,有几种情况可能会导致你观察到不同的行为:

服务器配置:如果服务器配置了不同的baseURL或路由规则,它可能会影响URL的解析方式。但这并不是由JavaScript或浏览器本身控制的,而是由服务器处理的。

构建工具:在构建过程中(例如使用Webpack、Rollup等),可能会修改URL或引入额外的配置,这些配置可能会改变URL的解析方式。例如,Webpack的publicPath选项就可以影响静态资源的URL。

浏览器插件或扩展:有些浏览器插件或扩展可能会修改网络请求的行为,包括URL的解析方式。

误解或错误:有时,你可能只是误解了URL的解析方式,或者你的代码中存在错误,导致你观察到了不符合预期的行为。

如果你确实遇到了基于JavaScript文件URL的解析行为,那么很可能是由于上述某种特殊情况导致的。但是,在大多数情况下,你应该可以期望相对URL是基于包含你的JavaScript的HTML页面的URL来解析的。



以上第二种回答是对的,你说的那种特殊情况,大概率是Webpack的publicPath选项就可以影响静态资源的URL导致的。