请注意,fetch
规范与 jQuery.ajax()
主要有三种方式的不同:
- 当接收到一个代表错误的 HTTP 状态码时,从
fetch()
返回的 Promise 不会被标记为 reject, 即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的ok
属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。 fetch()
不会接受跨域 cookies;你也不能使用fetch()
建立起跨域会话。其他网站的[Set-Cookie](https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)
头部字段将会被无视。-
完整的fetch
fetch(url, {
body: JSON.stringify(data), // 数据
cache: 'no-cache', //缓存 *default, no-cache, reload, force-cache, only-if-cached
headers: {
'content-type': 'application/json'//数据格式
},
method: 'POST', // *GET, POST, PUT, DELETE,
mode: 'cors', // no-cors, cors, *same-origin
redirect: 'follow', // manual, *follow, error 捕获重定向
referrer: 'no-referrer', // *client, no-referrer
})
.then(response => response.json()) // JSON
跨域
协议+域名+端口相同为同源
解决方案
- JSONP:通过
script
标签实现,但是只能实现GET
请求 - 代理转发:Webpack 的 dev 模式,配合
proxy
选项,启动一个前端服务器,实现代理转发 - CORS:后端允许跨域资源共享