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 相关文章推荐
js实时监听文本框状态的方法
Apr 26 Javascript
利用JS来控制键盘的上下左右键(示例代码)
Dec 14 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
Jun 07 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
AngularJS基础教程之简单介绍
Sep 27 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
详细分析JS函数去抖和节流
Dec 05 Javascript
常用的 JS 排序算法 整理版
Apr 05 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
Aug 20 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 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
php代码书写习惯优化小结
2013/06/20 PHP
PHP URL路由类实例
2013/11/12 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
PHP基本语法实例总结
2016/09/09 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
javascript动画浅析
2012/08/30 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
python线程池threadpool使用篇
2018/04/27 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
python实现在线翻译
2020/06/18 Python
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
《去年的树》教学反思
2014/04/11 职场文书
售后服务承诺函格式
2015/01/21 职场文书
党员理论学习心得体会
2016/01/21 职场文书
2019 入党申请书范文
2019/07/10 职场文书
乔迁新居祝福语
2019/11/04 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers