promise
promise状态
pending(进行中)、fulfilled(已成功)和 rejected(已失败)。
then方法
- then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise
执行失败时的回调,两个函数只会有一个被调用。 - 通过 .then 形式添加的回调函数,不论什么时候,都会被调用。
fetch
- fetch 规范与 jQuery.ajax() 的区别:
- 当接收到一个代表错误的 HTTP 状态码时,从 fetch() 返回的 Promise 不会被标记为 reject, 即使响应的 HTTP状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。
- fetch() 可以不会接受跨域 cookies;你也可以不能使用 fetch() 建立起跨域会话。其他网站的 Set-Cookie头部字段将会被无视。
- fetch 不会发送 cookies。除非你使用了credentials 的初始化选项。
eg:
fetch('http://example.com/movies.json')
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(myJson);
});
- 支持的请求参数
fetch() 接受第二个可选参数,一个可以控制不同配置的 init 对象 - 发送带凭据的请求
为了让浏览器发送包含凭据的请求(即使是跨域源),要将credentials: 'include’添加到传递给 fetch()方法的init对象。
如果只想在请求URL与调用脚本位于同一起源处时发送凭据,添加 credentials: ‘same-origin’。
要改为确保浏览器不在请求中包含凭据,使用 credentials: ‘omit’。 - 上传 JSON 数据
使用 fetch() POST JSON数据 - 上传文件
可以通过 HTML<input type="file" />
元素,FormData()
和fetch()
上传文件。 - 上传多个文件
可以通过HTML<input type="file" mutiple/>
元素,FormData()
和fetch()
上传文件。 - 检测请求是否成功
如果遇到网络故障,fetch()
promise 将会 reject,带上一个 TypeError 对象。虽然这个情况经常是遇到了权限问题或类似问题——比如 404 不是一个网络故障。想要精确的判断fetch()
是否成功,需要包含 promise resolved 的情况,此时再判断 Response.ok 是不是为 true。 - 自定义请求对象
除了传给fetch()
一个资源的地址,还可以通过使用Request()
构造函数来创建一个 request 对象,然后再作为参数传给fetch()