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 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
Angular 1.x个人使用的经验小结
Jul 19 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
js实现上传并压缩图片效果
Jan 10 Javascript
JQueryDOM之样式操作
Mar 27 jQuery
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
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
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
PHP使用函数用法详解
2018/09/30 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
javascript实现table表格隔行变色的方法
2015/05/13 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
25岁生日感言
2014/01/13 职场文书
大课间活动制度
2014/01/18 职场文书
税务干部鉴定材料
2014/02/11 职场文书
购房意向书
2014/04/01 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
合同纠纷调解书
2015/05/20 职场文书
初三语文教学反思
2016/03/03 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL