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函数setTimeout延迟执行的简单介绍
Jul 17 Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 Javascript
AngularJS自定义指令之复制指令实现方法
May 18 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
Nov 17 Javascript
Ionic学习日记实现验证码倒计时
Feb 08 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
详解mpvue scroll-view自动回弹bug解决方案
Oct 01 Javascript
如何为vuex实现带参数的 getter和state.commit
Jan 04 Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 Javascript
加速vue组件渲染之性能优化
Apr 09 Javascript
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
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脚本的10个技巧(5)
2006/10/09 PHP
php常用hash加密函数
2014/11/22 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
为什么需要版本控制?
2013/08/08 面试题
文秘应聘自荐书范文
2014/02/18 职场文书
工厂车间标语
2014/06/19 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
换届选举主持词
2015/07/03 职场文书
python使用glob检索文件的操作
2021/05/20 Python
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏