【问题标题】: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,只是因为它们没有本地实现。

标签: jquery ajax html fetch-api


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 2014-07-26
    • 2017-04-12
    • 2020-01-13
    • 2014-03-31
    • 2012-03-12
    • 2021-06-11
    • 2011-02-01
    • 2017-01-22
    相关资源
    最近更新 更多