ES6的Fetch异步请求的实现方法


Posted in Javascript onDecember 07, 2018

在前端的快速发展中,为了契合更好的设计模式,产生了Fetch框架,Fetch返回的信息比XMLHttpRequest更丰富。但它目前还不是一个标准,它支持大部分常用的http 请求和响应的标准。

一. 一个完整的post请求和响应的过程

var url = "/fetch";
     fetch(url,{
       method:"post",
       headers:{
         "Content-type":"application/x-www-form-urlencoded"
       },
       body:"name=luwenjing&age=22"
     })
      .then(function (response){
        if (response.status == 200){
          return response;
        }
      })
      .then(function (data) {
       return data.text();
      })
      .then(function(text){
        console.log("请求成功,响应数据为:",text);
      })
      .catch(function(err){
        console.log("Fetch错误:"+err);
      });

(1)fetch的参数有两个,第一个是url即请求的处理路径;

第二个是初始化信息,包括以下几种:

  • method:请求方法,常用的有get和post;
  • headers:请求头信息,最常用的就是表单格式的数据:”Content-type”:”application/x-www-form-urlencoded”;
  • mode:控制是否允许跨域。same-origin(同源请求)、no-cors(默认)和cros(允许跨域请求);
  • cache:关于缓存的一些设置;
  • body:要发送到后台的参数,可以为ArrayBuffer,String,FormData等类型;

(2)从上面的代码我们可以知道fetch()方法返回的是一个promise对象;

(3)响应信息为传入then方法成功时的参数,相应包含很多http的响应信息,如下:

ES6的Fetch异步请求的实现方法

(4)可以判断响应的状态吗,返回请求成功的对应信息;

(5)通过状态转换,转换为指定的格式,如果是文本信息,直接text()方法就可以;若为json格式,则json()就可以转换为json格式信息,其实也就是自己请求数据格式时所设置的格式;

二. 后台处理代码:

import java.io.IOException;
import java.io.Writer;

/**
 * Created by LuWenjing on 2017/4/5.
 */
public class fetchServlet extends javax.servlet.http.HttpServlet {
  protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    System.out.println(name + ": " + age);
    Writer out = response.getWriter();
    out.write("hello world!");
  }

  protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
    doPost(request, response);
  }
}

后台成功输出:ES6的Fetch异步请求的实现方法

浏览器控制台成功打印:ES6的Fetch异步请求的实现方法

三. 和ajax 的对比

(1)上面的Fetch代码很像jQuery中的ajax,但是两者是不同的,fetch是原生的js,而jQuery中的ajax是库封装的;

(2)ajax只能实现同源请求,fetch可实现跨域请求;

(3)ajax几乎所有的主流浏览器都支持,但fetch由于目前并没有被列入标准,只有像firefox最新版,chrome最新版,以及IE10+等以上才支持,如下图片所示;

ES6的Fetch异步请求的实现方法

注意:在body中向后台传递参数时,只有写成“key=value&key=value”的形式才会成功,其它方法后台接收到均为null,封装为FormData格式也不成功。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 生成指定范围数值随机数
Jan 09 Javascript
基于jQuery的前端数据通用验证库
Aug 08 Javascript
js 操作select和option常用代码整理
Dec 13 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 Javascript
JavaScript预解析及相关技巧分析
Apr 21 Javascript
Google 地图事件实例讲解
Aug 06 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
Ionic3实现图片瀑布流布局
Aug 09 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
Nov 13 Javascript
iview实现动态表单和自定义验证时间段重叠
Jan 10 Javascript
JavaScript this绑定过程深入详解
Dec 07 #Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 #Javascript
如何手动实现es5中的bind方法详解
Dec 07 #Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 #Javascript
vue+SSM实现验证码功能
Dec 07 #Javascript
详解如何为你的angular app构建一个第三方库
Dec 07 #Javascript
JS实现随机生成10个手机号的方法示例
Dec 07 #Javascript
You might like
php5 pdo新改动加载注意事项
2008/09/11 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
JS实现前端动态分页码代码实例
2020/06/02 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
使用Python写CUDA程序的方法
2017/03/27 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Python自动化操作实现图例绘制
2020/07/09 Python
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
婴儿地球:Baby Earth
2018/12/25 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
安全教育心得体会
2013/12/29 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
员工保密承诺书
2014/05/28 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Golang二维数组的使用方式
2021/05/28 Golang