fetch 和 jquery ajax 有啥区别?

Posted

技术标签:

【中文标题】fetch 和 jquery ajax 有啥区别?【英文标题】:What is the difference between fetch and jquery ajax?fetch 和 jquery ajax 有什么区别? 【发布时间】:2017-08-18 11:00:45 【问题描述】:

我想通过 fetch 发送一个 post 请求,但是它不起作用。

但是如果我通过 jQuery ajax 来做,它会成功。

我想知道这两种方式的区别,如果我在这里使用 fetch 有什么问题:

fetch('http://localhost:8888/news',
    method:"post",
    data:"code=7&a=8&b=9"
).then(function(data)
     data.json().then(function (json) 

【问题讨论】:

fetch 在 IE 中不起作用:developer.mozilla.org/en-US/docs/Web/API/… @Alex Fetch API 在 ios Safari (10.2) 中也不起作用 caniuse.com/#search=fetch 但它在所有其他当前主流浏览器中都可以使用——包括桌面 Safari 和 Edge 14+ @Alex jquery 不是浏览器的一部分,如果你说fetch 不起作用,那么jquery 也不会起作用。有些浏览器的 fetch polyfills 还没有原生实现。 @t.niese,jquery 不是一部分,因为它是库,可以在任何浏览器中使用,但 fetch 不是。 fetch 是 javascript 的一部分,而 javascript 是浏览器的一部分。 @Alex fetch(与 Promise 不同)不是 javascript 语言功能,而是 web api 功能。但这不是我的意思。您可以使用polyfill 在支持XMLHttpRequest 的浏览器中使用fetch。这就像你说你可以在旧浏览器中使用 bluebird 但没有 Promises,只是因为它们没有本地实现。 【参考方案1】:

Fetch 规范与jQuery.ajax() 的区别主要有两个方面:

    即使响应是 HTTP 404 或 500,从 fetch() 返回的 Promise 也不会拒绝 HTTP 错误状态。相反,它将正常解析(将 ok 状态设置为 false),并且它将仅在网络故障或任何阻止请求完成时才拒绝。

    默认情况下,fetch 不会从服务器发送或接收任何 cookie,如果站点依赖于维护用户会话(要发送 cookie,必须设置凭据 init 选项),则会导致未经身份验证的请求。

【讨论】:

以上是关于fetch 和 jquery ajax 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

JSON和AJAX与jQuery有啥区别?

$.ajax,axios,fetch三种ajax请求的区别

Fetch和ajax的比较和区别

XMLHttpRequest、jQuery.ajax、jQuery.post、jQuery.get 有啥区别

interviewaxiosajax和fetch的区别

前端随心记---------Axios/fetch/ajax的区别