我认为google.com使用AJAX,但是当我查看google.com的源代码时,我没有找到"XMLHttpRequest"
我也认为phpMyAdmin使用AJAX,但当我看了phpMyAdmin的源代码,我没有找到"XMLHttpRequest"
那么google.com和phpMyAdmin如何使用AJAX而不使用XMLHttpRequest
?他们可能在使用一个库,而这个库使用XMLHttpRequest
?
Ajax是一个通用术语,意思是"不离开页面就从JavaScript发出HTTP请求"。有许多方法可以做到这一点,其中一些方法比其他方法更有争议。
- XMLHttpRequest是经典方法。
- Fetch是一种现代的方法,它有一些优点(比如基于promise的API),但缺乏XHR所具有的一些特性(特别是上传进度监控)。JSONP通过在页面中注入
<script>
元素来工作,该元素在加载时调用回调。这是一种绕过同源策略的黑客,具有一定的安全风险,并已被CORS取代。 - 注入任何类型的元素来访问远程URL(比如图像),可以让你发出HTTP请求(但不能读取响应)。
- 看起来你也可以在Web Assembly中处理HTTP请求。
有许多库将它们自己封装在这些不同的api中。
回答你关于google.com是否使用XMLHttpRequest的问题,答案是肯定的。
使用Chrome浏览器,打开开发工具并进入网络选项卡。然后,在网页的搜索框中,键入一个字母,就像你要进行网络搜索一样。然后Google向服务器发送一个Ajax XMLHttpRequest,根据你输入的字母获得自动完成建议。
我输入了字母"a",这导致了几个请求,其中一个是一个以"search?q=a"开头的url。这可以从"名称"中看出。列。右边是一列"type",它显示该请求是一个XHR请求(这意味着它是通过XMLHttpRequest发出的)——获取请求将具有"fetch"作为这里的值)。再右边是"Initiator"列,它引用了发起网络请求的Javascript。