fetch 和 jQuery ajax 有什么区别?

56

我想通过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 中不起作用:https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API#浏览器兼容性 - Alexan
@Alex Fetch API在iOS Safari(10.2)中仍然无法使用http://caniuse.com/#search=fetch,但它可以在其他所有当前主要浏览器中使用,包括桌面版Safari和Edge 14+。 - sideshowbarker
2
@Alex,jQuery不是浏览器的一部分,如果你说fetch不起作用,那么jquery也不会起作用。对于尚未具有本地实现的浏览器,存在适用的fetch polyfills。 - t.niese
1
@t.niese,jQuery不是一部分,因为它是一个库,可以在任何浏览器中使用,但fetch不是。fetch是JavaScript的一部分,而JavaScript是浏览器的一部分。 - Alexan
2
@Alex fetch(与Promise不同)不是JavaScript语言的特性,而是Web API的特性。但这不是我的重点。您可以在支持XMLHttpRequest的浏览器中使用fetch,使用polyfill。这就好像您会说在旧版浏览器中可以使用bluebird但不能使用Promises,只是因为它们没有本地实现。 - t.niese
在2020年,MDN网站仍然表示.fetch.json在大多数情况下无法使用。所以,不要使用它,这是垃圾! - IncredibleHat
1个回答

80

Fetch规范与jQuery.ajax()主要有两个不同之处:

  1. 从fetch()返回的Promise即使响应是HTTP 404或500,也不会因HTTP错误状态而拒绝。相反,它将正常解决(ok状态设置为false),并且只有在网络失败或任何阻止请求完成的情况下才会拒绝。

  2. 默认情况下,fetch不会发送或接收来自服务器的任何cookie,这可能导致未经身份验证的请求,如果网站依赖于维护用户会话(要发送cookie,则必须设置凭据初始化选项)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接