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 相关文章推荐
用 JSON 处理缓存
Apr 27 Javascript
一些常用的JS功能函数(2009-06-04更新)
Jun 04 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 Javascript
js实现兼容IE、Firefox的图片缩放代码
Dec 08 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
完美JQuery图片切换效果的简单实现
Jul 21 Javascript
微信小程序API—获取定位的详解
Apr 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
一个典型的PHP分页实例代码分享
2011/07/28 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
php文件上传的两种实现方法
2016/04/04 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
Vue插槽原理与用法详解
2019/03/05 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
跟老齐学Python之用while来循环
2014/10/02 Python
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python实现将内容分行输出
2015/11/05 Python
python模拟Django框架实例
2016/05/17 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python合并多个Excel数据的方法
2018/07/16 Python
py-charm延长试用期限实例
2019/12/22 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python文件和文件夹复制函数
2020/02/07 Python
python之生成多层json结构的实现
2020/02/27 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
详解Anaconda 的安装教程
2020/09/23 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
六年级语文教学反思
2016/03/03 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
SQL Server删除表中的重复数据
2022/05/25 SQL Server