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 Event学习第六章 事件的访问
Feb 07 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
Apr 15 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
Dec 10 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
Jul 10 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
Jan 14 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 Javascript
layui-table获得当前行的上/下一行数据的例子
Sep 24 Javascript
通过js实现压缩图片上传功能
Feb 25 Javascript
12 种使用Vue 的最佳做法
Mar 30 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python zip文件 压缩
2008/12/24 Python
python基础教程之获取本机ip数据包示例
2014/02/10 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
精彩的推荐信范文
2013/11/26 职场文书
教师考核评语大全
2014/12/31 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
入学证明
2015/06/23 职场文书
庆祝教师节主持词
2015/07/06 职场文书