Fetch的使用

一.简介:
原生JS(fetch和XMLHttpRequest)请求API的一种方式,可以调用.then的方法,可以看成一个promise函数!
二.具体使用:
1.GET请求

 fetch('http://example.com/movies.json')
	  .then(function(response) {
	    return response.json();
	  })
	  .then(function(myJson) {
	    console.log(myJson);
	  })
	  .catch(function(err) {
	    console.log(err);
	  });

1.POST请求:

  var url = 'https://example.com/profile';
	var data = {username: 'example'};
	
	fetch(url, {
	  method: 'POST', // or 'PUT'
	  body: JSON.stringify(data), // data can be `string` or {object}!
	  headers: new Headers({
	    'Content-Type': 'application/json'
	  })
	}).then(res => res.json())
	.then(response => console.log('Success:', response))
	.catch(error => console.error('Error:', error));

3.上传文件:

var formData = new FormData();
	var fileField = document.querySelector("input[type='file']");
	
	formData.append('username', 'abc123');
	formData.append('avatar', fileField.files[0]);
	
	fetch('https://example.com/profile/avatar', {
	  method: 'PUT',
	  body: formData
	})
	.then(response => response.json())
	.then(response => console.log('Success:', response))
	.catch(error => console.error('Error:', error));

三.封装fetch:

/**
	 * 将对象转成 a=1&b=2的形式
	 * @param obj 对象
	 */
	function obj2String(obj, arr = [], idx = 0) {
	  for (let item in obj) {
	    arr[idx++] = [item, obj[item]]
	  }
	  return new URLSearchParams(arr).toString()
	}
	/**
	 * 真正的请求
	 * @param url 请求地址
	 * @param options 请求参数
	 * @param method 请求方式
	 */
	function commonFetcdh(url, options, method = 'GET') {
	  const searchStr = obj2String(options)
	  let initObj = {}
	  if (method === 'GET') { // 如果是GET请求,拼接url
	    url += '?' + searchStr
	    initObj = {
	      method: method,
	      credentials: 'include'
	    }
	  } else {
	    initObj = {
	      method: method,
	      credentials: 'include',
	      headers: new Headers({
	        'Accept': 'application/json',
	        'Content-Type': 'application/x-www-form-urlencoded'
	      }),
	      body: searchStr
	    }
	  }
	  fetch(url, initObj).then((res) => {
	    return res.json()
	  }).then((res) => {
	    return res
	  })
	}
	
	/**
	 * GET请求
	 * @param url 请求地址
	 * @param options 请求参数
	 */
	function GET(url, options) {
	  return commonFetcdh(url, options, 'GET')
	}
	
	/**
	 * POST请求
	 * @param url 请求地址
	 * @param options 请求参数
	 */
	function POST(url, options) {
	  return commonFetcdh(url, options, 'POST')
	}
	调用实例:
	GET('https://www.baidu.com/search/error.html', {a:1,b:2})
	POST('https://www.baidu.com/search/error.html', {a:1,b:2})

四.参考内容:
俱沫:《fetch,终于认识你》https://segmentfault.com/a/1190000011433064;
mdn:《使用fetch》https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值