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 相关文章推荐
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
js中apply()和call()的区别与用法实例分析
Aug 14 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 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作为Shell脚本语言使用
2006/10/09 PHP
PHP中设置时区方法小结
2012/06/03 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
php单一接口的实现方法
2015/06/20 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
犀利的js 函数集合
2009/06/11 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
页面使用密码保护代码
2013/04/10 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
Python获取央视节目单的实现代码
2015/07/25 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python实现广度优先搜索过程解析
2019/10/19 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
pycharm实现猜数游戏
2020/12/07 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
班主任新年寄语
2014/04/04 职场文书
小学节能减排倡议书
2014/05/15 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2014年就业工作总结
2014/11/26 职场文书
经营场所证明范本
2015/06/19 职场文书
Django实现翻页的示例代码
2021/05/24 Python
Python异常类型以及处理方法汇总
2021/06/05 Python