使用XMLHttpRequest是实现AJAX的唯一方式吗?谷歌及phpMyAdmin的AJAX探究
你观察到的情况很常见,这俩产品之所以找不到XMLHttpRequest,核心原因是原生请求API被封装或替换了,具体可以从这几个角度理解:
原生API被封装成高层类库
谷歌和phpMyAdmin都会自研或使用封装好的请求工具,把XMLHttpRequest(或Fetch)包装成更易用的接口——比如Promise风格的请求方法、带拦截器的请求类。这些封装后的代码会隐藏原生API的调用细节,所以直接全局搜索XMLHttpRequest自然找不到。比如谷歌内部有自己的前端框架,请求逻辑都被封装在框架的核心模块里;phpMyAdmin也会把AJAX请求封装成自定义的函数或类,统一处理请求头、响应解析等逻辑。使用Fetch API替代XMLHttpRequest
现代前端开发中,很多项目会用fetch()这个原生API替代传统的XMLHttpRequest,它基于Promise,写法更简洁。谷歌的很多新功能模块、phpMyAdmin的新版本都可能采用Fetch来实现AJAX,这时候你搜fetch关键词反而能找到相关代码,而不是XMLHttpRequest。代码被压缩混淆
像谷歌这种大型网站,上线前会对代码做极致的压缩和混淆:变量名、类名、API名都会被替换成无意义的短字符(比如把XMLHttpRequest改成x或a)。你看到的源码是压缩后的产物,自然搜不到原始的API名称。如果要查看真实逻辑,需要用浏览器开发者工具的“格式化代码”功能还原后再搜索。模块化按需加载
现在的前端项目大多采用模块化开发,请求相关的代码会被拆成独立模块,只有在需要发起AJAX请求时才会加载这个模块。全局搜索的时候,因为模块没被加载或不在当前全局作用域,所以找不到XMLHttpRequest的引用。
总结来说,它们并不是“不依赖XMLHttpRequest”,而是通过封装、替换、压缩等方式,把原生API的调用隐藏起来了,本质上还是基于浏览器的HTTP请求能力实现的AJAX。
内容的提问来源于stack exchange,提问作者user247763

