发起获取资源请求的咱们通常都会用AJAX技术,最近在学习微信小程序的时候,用到了fetch()方法。javascript
fetch()方法用于发起获取资源的请求。它返回一个promise,这个promise会在请求响应以后被resolve,并传回Response对象,基本上在任何场景下只要你想获取资源,均可以使用fetch()方法,可是如今存在兼容性的问题,查看兼容性:http://caniuse.com/#search=fetch()java
当遇到网络错误是,fetch()返回的promise会被reject(阻止),并传回TypeError;成功的fetch()检查不只要包括promise被解析,还要包括Response.ok属性为true.Http 404状态并不被认为是网络错误小程序
一:语法微信小程序
fetch(input, init).then(function(response) {...})
参数:promise
input:要获取的资源,多是字符串(包含要获取资源的url),也多是Request对象浏览器
init:安全
method:请求使用的方法,如:POST/GET微信
headers:请求头信息,多是字符串,也有多是Header对象网络
body:请求的body信息:多是 Blod/BufferSource/FormData/URLSearchParam或者是字符串app
mode:请求模式:cors /no-cors/same-origin
credentials:请求的credentials
cache:请求的cache模式:default,no-store,reload,no-cache,force-cache ,only-if-cached
返回值:一个Promise,解析时传回Response对象
示例1:好比说在百度页面打开控制台,
输入:
fetch("https://www.baidu.com").then(function(response){console.log(response)})
示例2:
var myImage = document.querySelector('img'); var myRequest = new Request('flowers.jpg'); fetch(myRequest).then(function(response){ return response.blob(); }).then(function(response){ var objectURL = URL.createObjectURL(response); myImage.src = objectURL; })
下面的是有init参数的
var myImage = document.querySelector("img"); var myHeaders = new Headers(); myHeaders.append("Content-Type","image/jpeg"); var myInit = { method: "GET", headers: myHeaders, mode: 'cors', cache: "default" } var myRequest = new Request("flowers.jpg"); fetch(myRequest, myInit).then(function(response){ return response.blob(); }).then(function(response){ var objectURL = URL.createObjectURL(response); myImage.src = objectURL; })
URL.createObjectURL()静态方法会建立一个DOMString,她的URL表示参数中的对象。这个URL的声明周期和建立她的窗口中的document绑定。这个新的URL对象表示着指定的FILR对象或者是Blob对象
语法: objectURL = URL.createObjectURL(blob)
参数:用来建立URL的File对象或者是Blob对象
每次调用createObjectURL()方法时,都会建立一个新的URL对象,即便已经用相同的对象做为参数建立过。当再也不使用这些URL对象时,每一个对象必须经过调用 URL.revokeObjectURL()方法来释放。浏览器会在文档退出的时候自动释放它们,可是为了得到最佳性能和内存使用情况,你应该在安全的时机主动释放掉它们。