[转] 学会fetch的用法

fetch是web提供的一个可以获取异步资源的api,目前还没有被所有浏览器支持,它提供的api返回的是Promise对象,所以你在了解这个api前首先得了解Promise的用法。参考阮老师的文章

那我们首先讲讲在没有fetch的时候,我们是如何获取异步资源的:

//发送一个get请求是这样的:

//首先实例化一个XMLHttpRequest对象
var httpRequest = new XMLHttpRequest();

//注册httpRequest.readyState改变时会回调的函数,httpRequest.
//readyState共有5个可能的值,
//0	UNSENT (未打开)	open()方法还未被调用;
//1	OPENED  (未发送)	send()方法还未被调用;
//2	HEADERS_RECEIVED (已获取响应头)	send()方法已经被调用, 响应头和响应状态已经返回;
//3	LOADING (正在下载响应体)	响应体下载中; responseText中已经获取了部分数据;
//4	DONE (请求完成)	整个请求过程已经完毕.
httpRequest.onreadystatechange = function(){
 //该回调函数会被依次调用4次
 console.log(httpRequest.readyState);

 if(httpRequest.readyState===4){
   //请求已完成
   if(httpRequest.status===200){
     //http状态为200
     console.log(httpRequest.response);

     var data = JSON.parse(httpRequest.response);
     console.log(data);
   }
 }

}

//请求的网址
var url = "http://127.0.0.1:7777/list";
//该方法为初始化请求,第一个参数是请求的方法,比如GET,POST,PUT,第二个参数是请求的url
httpRequest.open(‘GET‘,url,true);

//设置http请求头
httpRequest.setRequestHeader("Content-Type","application/json");

//发出请求,参数为要发送的body体,如果是GET方法的话,一般无需发送body,设为空就可以
httpRequest.send(null);

关于XMLHttpRequest的更多用法请参照:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest#open()

如果用了fetch之后,发送一个get请求是这样的:

//请求的网址
var url = "http://127.0.0.1:7777/list";
//发起get请求
var promise = fetch(url).then(function(response) {

   //response.status表示响应的http状态码
   if(response.status === 200){
     //json是返回的response提供的一个方法,会把返回的json字符串反序列化成对象,也被包装成一个Promise了
     return response.json();
   }else{
     return {}
   }

});

promise = promise.then(function(data){
  //响应的内容
	console.log(data);
}).catch(function(err){
	console.log(err);
})

接下来介绍下fetch的语法:

/**
参数:
input:定义要获取的资源。可能的值是:一个URL或者一个Request对象。
init:可选,是一个对象,参数有:
	method: 请求使用的方法,如 GET、POST。
	headers: 请求的头信息,形式为 Headers 对象或 ByteString。
	body: 请求的 body 信息:可能是一个 Blob、BufferSource、FormData、URLSearchParams 或者 USVString 对象。注意 GET 或 HEAD 方法的请求不能包含 body 信息。
	mode: 请求的模式,如 cors、 no-cors 或者 same-origin,默认为no-cors,该模式允许来自 CDN 的脚本、其他域的图片和其他一些跨域资源,但是首先有个前提条件,就是请求的 method 只能是HEAD、GET 或 POST。此外,如果 ServiceWorkers 拦截了这些请求,它不能随意添加或者修改除这些之外 Header 属性。第三,JS 不能访问 Response 对象中的任何属性,这确保了跨域时 ServiceWorkers 的安全和隐私信息泄漏问题。cors模式允许跨域请求,same-origin模式对于跨域的请求,将返回一个 error,这样确保所有的请求遵守同源策略。
	credentials: 请求的 credentials,如 omit、same-origin 或者 include。
	cache:  请求的 cache 模式: default, no-store, reload, no-cache, force-cache, or only-if-cached.
返回值:一个 Promise,resolve 时回传 Response 对象。
*/
fetch(input, init).then(function(response) {  });

一个发送post请求的示例:

fetch("http://127.0.0.1:7777/postContent", {
  method: "POST",
  headers: {
      "Content-Type": "application/json",
  },
  mode: "cors",
  body: JSON.stringify({
      content: "留言内容"
  })
}).then(function(res) {
  if (res.status === 200) {
      return res.json()
  } else {
      return Promise.reject(res.json())
  }
}).then(function(data) {
  console.log(data);
}).catch(function(err) {
  console.log(err);
});

如果考虑低版本浏览器的问题的话,引入https://github.com/github/fetch/blob/master/fetch.js 即可兼容。

原文地址:https://www.cnblogs.com/chris-oil/p/8430447.html

时间: 2024-07-31 14:46:02

[转] 学会fetch的用法的相关文章

git clone, push, pull, fetch 的用法

Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git远程操作. git clone git remote git fetch git pull git push 本文针对初级用户,从最简单的讲起,但是需要读者对Git的基本用法有所了解.同时,本文覆盖了上面5个命令的几乎所有的常用用法,所以对于熟练用户也有参考价值. git 一.git clone

ajax与fetch的用法

// 传统ajax用法 var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.timeout = 2000; console.log(xhr.readyState);//0 xhr.open('GET', url); console.log(xhr.readyState);//1 xhr.onloadstart = function (e) { xhr.abort(); console.log(e); }; xhr.onpr

fetch()的用法

发起获取资源请求的我们一般都会用AJAX技术,最近在学习微信小程序的时候,用到了fetch()方法. fetch()方法用于发起获取资源的请求.它返回一个promise,这个promise会在请求响应之后被resolve,并传回Response对象,基本上在任何场景下只要你想获取资源,都可以使用fetch()方法,但是现在存在兼容性的问题,查看兼容性:http://caniuse.com/#search=fetch() 当遇到网络错误是,fetch()返回的promise会被reject(阻止)

fetch的用法

1.重构公司的后台项目,偶然间在git上看见别人的项目中用到fetch,查了下才知道是ES6的新特性,和ajax的功能相似,都是实现请求,但是多少有些兼容性问题. (1)fetch和XMLHttpRequest fetch就是XMLHttpRequest的一种替代方案,除了XMLHttpRequest对象来获取后台的数据之外,还可以使用一种更优的解决方案fetch. (2)如何获取fetch https://developer.mozilla.org/zh-CN/docs/Web/API/Fet

Android 结合实例学会AsyncTask的用法

AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可以设置或修改UI控件,该方法的执行时机是:onPreExecute()执行完毕立即调用该方法,在方法中进行耗时操作,可以在该方法中调用publishProgress方法来发布当执行的进度,调用publishProgress方法后就会立即触发onProgressUpdate方法 3.onProgres

Hibernate fetch 抓取策略

上一篇文章(Hibernate的延迟加载 ,懒加载,lazy)说到Hibernate的延迟加载跟fetch的配置还有一定关系,下面就来讨论下fetch的用法. 抓取策略(fetch)是指当我们去查询一个对象里面所关联的其他对象时,按照哪种方法去抓取关联对象. fetch策略一共有四种:select.subselect.join.batch,下面我们一一介绍.我们还是用上面介绍延迟加载的相关表和实体类. Company表: Employee表(employee_company_id为外键) Com

git fetch和push的区别

获取fetch的用法 git-fetch用于从另一个reposoitory下载objects和refs. 命令格式为:git fetch … 其中表示远端的仓库路径.git remote add origin [email protected]:schacon/simplegit-progit.git 其中的标准格式应该为:,表示远端仓库的分支,如果不为空,则表示本地的分支:如果为空,则使用当前分支. git fetch /home/bob/myrepo master:bobworks :用于从

fetch和XMLHttpRequest讲解

写在前面 fetch 同 XMLHttpRequest 非常类似,都是用来做网络请求.但是同复杂的XMLHttpRequest的API相比,fetch使用了Promise,这让它使用起来更加简洁,从而避免陷入"回调地狱". 两者比较 比如,如果我们想要实现这样一个需求:请求一个URL地址,获取响应数据并将数据转换成JSON格式.使用fetch和XMLHttpRequest实现的方式是不同的. 使用XMLHttpRequest实现 使用XMLHttpRequest来实现改功能需要设置两个

非限制定语从句的用法

非限制性定语从句也是定语从句的一种,在高中语法知识中它也是非常重要的一项的,老师们对于非限定性定语从句的讲解也是非常重视的.因为在考试中经常会出现该从句的讲解,下面大家就跟随小编一起来了解该从句的讲解. 说到非限定性定语从句的讲解,还要分成不同的部分,首先大家要知道就得就是该从句的作用是什么.其实它在句子中是一个独立的成分,不会受到主句 的限制,把从句去掉之后,主句仍然是成立的.这也是为什么它会叫做非限定性定语从句.其次,大家要了解该从句的形式:非限制性定语从句与先行词以及主句之 间的关系不甚紧