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('错误');
})

ajax、fetch、axios — 请求数据的更多相关文章

  1. fetch 如何请求数据

    fetch 如何请求数据 在 传统Ajax 时代,进行 API 等网络请求都是通过XMLHttpRequest或者封装后的框架进行网络请求,然而配置和调用方式非常混乱,对于刚入门的新手并不友好 二 与 ...

  2. Vue之单文件组件的数据传递,axios请求数据及路由router

    1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...

  3. ajax和axios请求本地json数据对比

    AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进 ...

  4. vue之axios请求数据本地json

    写给自己的话:静态的json文件要记得放在static文件夹下,想打自己 1.下载插件 npm install axios --save 2.在main.js下引用axios import axios ...

  5. Vue框架Element UI教程-axios请求数据

    Element UI手册:https://cloud.tencent.com/developer/doc/1270 中文文档:http://element-cn.eleme.io/#/zh-CN gi ...

  6. axios请求数据完整

    <template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> 首页组件 <button @clic ...

  7. 解析Fetch实现请求数据

    一 序言 在 传统Ajax 时代,进行 API 等网络请求都是通过XMLHttpRequest或者封装后的框架进行网络请求,然而配置和调用方式非常混乱,对于刚入门的新手并不友好.今天我们介绍的Fetc ...

  8. 关于试用jquery的jsonp实现ajax跨域请求数据的问题

    我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...

  9. Ajax跨域请求数据实例(JSOPN方式)

    今天在做取消申请的时候遇到了一个跨域ajax提交的问题. 情景是: 系统A是asp.net的站点,其中包括一个取消申请的接口(get方式通过参数提交到系统的某一个页面,然后返回提交成功或失败) 系统B ...

随机推荐

  1. 【刷题】LOJ 556 「Antileaf's Round」咱们去烧菜吧

    题目描述 你有 \(m\) 种物品,第 \(i\) 种物品的大小为 \(a_i\) ​,数量为 \(b_i\)​( \(b_i=0\) 表示有无限个). 你还有 \(n\) 个背包,体积分别为 \(1 ...

  2. 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)

    学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...

  3. 「SHOI2016」黑暗前的幻想乡 解题报告

    「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱. 期间想过矩阵树定理, ...

  4. How To Install WildFly as a Service on Linux

    Installing WildFly as a service on Linux has multiple advantages like automatic start on system boot ...

  5. 【模板】splay维护序列

    题目大意:维护一个长度为 N 的序列,支持单点插入,单点询问. 注意事项如下: build 函数中要记得初始化 fa. 插入两个端点值. 代码如下 #include <bits/stdc++.h ...

  6. exgcd证明和最基础应用

    如何求解这个方程:\(ax + by = gcd (a, b)\)? \(∵gcd(a, b) = gcd (b, a \% b)\) \(∴\)易证 $ gcd(a, b)$ 总是可以化为 \(gc ...

  7. 【Mac进销存管理软件】Daily Sales Pro Mac

        [简介] Daily Sales Mac版是Mac平台上的一款进销存软件,库存管理系统.Daily Sales Mac版是一款易于使用的进出库存管理软件,让您及时了解库存状况.销售收入.采购成 ...

  8. 图形设计必备软件:CorelDRAW

    [CorelDRAW 激发创意] CorelDRAW Graphics Suite 是一款领先的图形设计软件,收到数百万专业人士.小型企业主以及全球设计爱好者的热捧.它可以提供无缝的图形.版面.插图. ...

  9. as依赖解决报错

    Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.suppor ...

  10. ubuntu14.04安装tun/tap网络设备

    14.04的系统默认是没有tun设备的,所以需要通过在内核中编译时勾选此设备.接下来分步来介绍如何安装tun设备. 一.更新ubuntu桌面版源: sudo gedit /etc/apt/source ...