zoukankan      html  css  js  c++  java
  • ajax、fetch、axios — 请求数据

    jquery ajax

    jq 的ajax是对原生XHR的封装,除此以外还增添了对JSONP的支持。用起来非常方便

    用法:

     $.ajax({
            url:发送请求的地址,
            data:数据的拼接,//发送到服务器的数据
            type:'get',//请求方式,默认get请求
            dataType:'json',//服务器返回的数据类型
            async:true,//是否异步,默认true
            cache:false,//设置为 false 将不会从浏览器缓存中加载请求信息
            success:function(){},//请求成功后的回调函数(这个函数会得到一个参数:从服务器返回的数据)
            error: function(){}//请求失败时调用此函数
    
     })

    优缺点

    • 本身是针对MVC的编程,不符合现在前端MVVM的浪潮
    • 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
    • JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)
    • 配置和调用方式非常混乱,而且基于事件的异步模型不友好

    fetch

    原生提供的ajax请求的一种方式,用于获取资源

    由于Fetch API是基于Promise设计,旧浏览器不支持Promise,需要使用pollyfill es6-promise

    fetch的优势:

    • 语义简洁,更加语义化
    • 更加底层,提供的API丰富(request, response)
    • 脱离了XHR,是ES规范里新的实现方式
    • 基于promise实现,支持async/await

    用法:

    get方式

    fetch('/users?'+new URLSearchParams(obj).toString())
        .then(d=>d.json())
        .then(d=>{
           console.log(d);
    })

    post方式

    fetch('/users',{
             method:'post',
             headers:{'Content-Type':'application/x-www-form-urlencoded'},//设置头信息
             body:new URLSearchParams(obj).toString()//将对象变为url地址上的查询信息
        })
       .then(d=>d.json())
       .then(d=>{
                console.log(d);
    })

    axios

    用法:

    get方式

    axios.get('/get?user=xiaohuang')
    .then(e=>{  //进了then就会成功,否则会进catch
        console.log(e);
    })
    .catch(e=>{
        //报错内容
    })

    post方式

    axios({
        method: 'post',
        url: '/user/12345',
        data: {
            firstName: 'Fred',
            lastName: 'Flintstone'
        }
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    })

    特性:

    • 从 node.js 创建 http 请求
    • 支持 Promise API
    • 客户端支持防止CSRF
    • 提供了一些并发请求的接口
    • 自动转换JSON数据

    栗子:

    get请求成功之后 再请求post 然后 两个条件都成立 才执行结果

    axios.get('/get?user=xiaoming')
    .then(e=>{
        if(e.data.code == 0){
            //这里的目的是为了进下一次的then
            return axios.post('/post',{
                user:'xiaohong'
            })
            else{
                //这里目的是为了进下一次的catch
                throw '失败';
            }
        }
    })
    .then(e=>{
        if(e.data.code == 0){
            console.log('芝麻开门');
        }else{
            throw '开门';
        }
    })
    .catch(e=>{
        console.log(e);
    })

    axios.all

    同时执行多个请求,all里面必须两个请求都成立才返回成功(只要一个请求失败,整体都会失败)

     let arr = [get(),post()];
            axios.all(arr)
            .then( axios.spread(function (a, b) {
                console.log(1);
                if(a.data.code == 0 && b.data.code == 0){
                    console.log('变身');
                }else{
                    console.log('再等一万年');
                }
        })).catch(e=>{
                console.log('错误');
    })
  • 相关阅读:
    LA 3135 优先队列
    uva 11991 查询中容器的运用
    uva 11995 判别数据类型
    LA 4973异面线段
    LA 2797 平面区域dfs
    LA 2218 半平面交
    poj 3525 求凸包的最大内切圆
    poj 1031 多边形对点(向周围发射光线)的覆盖
    poj 1269 直线间的关系
    kotlin学习笔记-异常好玩的list集合总结
  • 原文地址:https://www.cnblogs.com/theblogs/p/10564714.html
Copyright © 2011-2022 走看看