你知道在浏览器环境下JavaScript能够利用到的提交/请求数据的方式有哪些吗?这些方式各自有什么特点呢?在什么情况下使用呢?让我们一起来整理一下。

基础知识

建议大家先看完这几篇文章,了解一下基础知识

XMLHTTPRequest

XMLHTTPRequest是最常见的,也是很多框架封装的数据请求方法的底层实现,如我们最熟悉的各类框架的Ajax方法。
详细文档:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

Form Action

可以利用Form(表单)来提交/请求,这太常用,于是我们习以为常了。其实这也是JavaScript能够利用到的提交/请求数据的方式之一。
详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form
文档有意思的,常被新手忽略的的target属性,可配合iframe实现无刷新地与服务器交互(跨域)

A Href

既然Form Action也算,那a标签的href也算吧,233
详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a

Script Src

没错,这个也算。JSONP就是利用script标签的src来请求数据,然后等待数据请求完毕后从script标签中读取数据,巧妙地解决了跨越的问题。一些AMD JavaScript框架也用script标签来异步加载模块,如requirejs。一些JavaScript模版也会用script标签来加载模版,如artTemplate。
详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

Link Href

没错我说的就是这些。脑洞开起来,一起整理出来。

详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link

Img Src

这个也可以用来数据,一般是图像数据。JavaScript可以监听图像加载后的响应。可以拿到图像像素数据,可以配合Canvas做复杂图像处理,不过有跨域限制。

详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img

Audio Src

和上面的差不多。
详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio
对于audio底层处理有兴趣的可以参考这篇

Video Src

和上面的差不多。
详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video

frame& iframe Src

差点忘了这两个兄弟,虽然哥哥frame已经基本没人用了。
详细文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Fetch

这个新出的玩意儿,只有少数高版本浏览器支持。本质与XMLHTTPRequest不同。但有的框架为了支持更多平台,统一API,对不支持Fetch的浏览器提供底层XMLHTTPRequest实现的支持。
详细文档:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

PS: 以上大多数情况下都是用到基于HTTP协议的功能,少数有用到file协议和ftp协议的。

WebSocket

WebSocket则提供给我们机会让我们利用TCP协议与服务端建立长链接,持续通信。
详细文档:https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

WebRTC

越来越厉害了,233
详细文档:https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API

还有吗?欢迎补充&纠错

补充一点,注意区分get跨域和post跨域

待更新

  • fetch的源码,原理相关


Myou_Aki
415 声望35 粉丝