vue前后端交互--day04

本文介绍了Vue中前后端交互的常见方式,包括使用原生Ajax、fetch API和axios库。详细讲解了URL的两种格式,RESTful API的HTTP请求方法,以及异步处理的概念。重点探讨了Promise的使用,包括异步函数不嵌套、嵌套及发送Ajax请求的实例。此外,还涵盖了fetch的基本API和axios的基础与重要用法,以及如何使用async、await进行异步处理。
摘要由CSDN通过智能技术生成

个人blog-1: 拾忆生活
个人blog-2: 极简-拾忆生活
欢迎大家来踩,同步更新


接口调用方式

  • 原生ajax
  • fetch
  • axios
  • async、await

URL地址格式

1.传统URL

格式:https://localhost:3000/a?query#fragment

  • 协议
  • 域名或IP地址
  • 端口
  • 路径
  • 查询参数
  • 锚点(哈希Hash)

2.Restful的URL【跟提交方式有关】

  • http请求方式
    • GET 查询
    • POST 添加
    • PUT/PATCH 修改
    • DELETE 删除
  • 通过在地址后直接加 / 来修改数据

分析下PUT和PATCH的区别:
实例:假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。现在只修改userName。

【PUT是全局更新,后端不仅更新接收到的userName字段,还更新其他的9个字段。】
【PATCH是局部更新,后端仅更新接收到的userName字段。】

异步

  • JavaScript的执行环境是「单线程」

  • 单线程,指一次只能完成一项任务,这个任务执行完后才能执行下一个,它会「阻塞」其他任务。这个当前任务可称为主线程

  • 异步模式可以一起执行多个任务

  • JS中常见的异步调用

    • 1.定时任务
    • 2.ajax
    • 3.事件函数

一、promise(es6)

node环境中导入
npm init -y
npm i body-parser
npm i express
npm i nodemon

前期配置app.js

const express = require('express')
const bodyParser = require('body-parser')

const app = express()
// 处理静态资源
app.use(express.static('public'))
// 处理参数
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false }));

// 设置允许跨域访问该服务
app.all('*', function (req, res, next) {
   
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header('Access-Control-Allow-Headers', ['mytoken','Content-Type']);
  next();
});

···

// 启动监听
app.listen(3000, () => {
   
  console.log('running...')
})

1.简单实例

app.js

// 路由
app.get('/data', (req, res) => {
   
  res.send('Hello World!')
})
app.get('/data1', (req, res) => {
   
  setTimeout(function(){
   
    res.send('Hello TOM!')
  },1000);
})
app.get('/data2', (req, res) => {
   
  res.send('Hello JERRY!')
})

01.html

 var ret = '---';
 $.ajax({
   
   url: 'http://localhost:3000/data',
   success: function(data) {
   
     ret = data;
     //这里会显示路由中拿到的data的赋值【后执行】
     console.log(ret)
   }
 });
//因为异步,所以还是显示---【先执行】
 console.log(ret)

2.简单实例(异步函数不嵌套)

  • 这里执行顺序不能确定

01.html

$.ajax({
   
  url: 'http://localhost:3000/data',
  success: function(data) {
   
    console.log(data)
  }
});
$.ajax({
   
  url: 'http://localhost:3000/data1',
  success: function(data) {
   
    console.log(data)
  }
});
$.ajax({
   
  url: 'http://localhost:3000/data2',
  success: function(data) {
   
    console.log(data)
  }
});

3.简单实例(异步函数嵌套)

  • 这里执行顺序确定
$.ajax({
   
    url: 'http://localhost:3000/data',
    success: function(data) {
   
      console.log(data)
      $.ajax({
   
        url: 'http://localhost:3000/data1',
        success: function(data) {
   
          console.log(data)
          $.ajax({
   
            url: 'http://localhost:3000/data2',
            success: function(data) {
   
              console.log(data)
            }
          });
        }
      });
    }
  });

4.promise异步简单实例

  • Promise(function(resolve, reject){...}

    • 第一个参数 resolve :异步操作执行成功后的回调函数
    • 第二个参数 reject :异步操作执行失败后的回调函数
  • resolve('xxx');

    • 执行成功后的结果
  • reject('xxx');

    • 执行失败后的结果
  • 获取结果方法一:

    • then 函数,在函数里面的参数是 获 取 成 功 结 果 \color{red}获取成功结果 ,对应resolve函数
    • catch 函数,在函数里面的参数是 获 取 失 败 结 果 \color{red}获取失败结果 ,对应resolve函数
promise.then((result) => {
   
    console.log(result);
})
.catch((err)=> {
   
    console.log(err);
})
  • 获取结果方法二:

    • 单独 then 方法 指定 resolved 状态和 reject 状态的回调函数
    • 第一个参数:获取成功结果
    • 第二个参数:获取失败结果
promise.then(function(data){
   
    console.log(data)
  },function(info){
   
    console.log(info)
  });

02.html

<script type="text/javascript">
  var p = new Promise(function(resolve, reject){
    
    //2. 这里用于实现异步任务  setTimeout
    setTimeout(function(){
    
      var flag = false;
      if(flag) {
    
        //3. 正常情况
        resolve('hello');
      }else{
    
        //4. 异常情况
        reject('出错了');
      }
    }, 100);
  });
  p.then(function(data){
    
    console.log(data)
  },function(info){
    
    console.log(info)
  });
</script>

5.promise异步简单实例【发送Ajax请求】

  • 创建发送ajax请求的封装函数url, function queryData(url) {}

    • 里面创建一个Promise实例 var p = new Promise(function(resolve, reject){...}
    • 最后返回实例对象 return p;
  • 调用封装函数url【发送多个ajax请求,并链式调用确保按顺序执行】

    • 异步继续调用,可以链式编程下去,需要 return
queryData('http://localhost:3000/data')
      .then(function(data){
   
        console.log(data)
        return queryData('http://localhost:3000/data1');
      })
      .then(...)

03.html

<script type="text/javascript">
//创建发送ajax请求的函数
  function queryData(url) {
    
  //  创建一个Promise实例
    var p = new Promise(function(resolve, reject){
    
      var xhr = new XMLHttpRequest();
      //不止调用一次,状态变化就调用
      xhr.onreadystatechange = function(){
    
        if(xhr.readyState != 4) return;
        if(xhr.readyState == 4 && xhr.status == 200) {
    
          // 处理正常的情况
          resolve(xhr.responseText);
        }else{
    
          // 处理异常情况
          reject('服务器错误');
        }
      };
      xhr.open('get', url);
      xhr.send(null);
    });
    return p;
  }

  queryData('http://localhost:3000/data')
    .then(function(data){
    
      console.log(data)
      return queryData('http://localhost:3000/data1');
    })
    .then(function(data){
    
      console.log(data);
      return queryData('http://localhost:3000/data2');
    })
    .then(function(data){
    
      console.log(data)
    });
</script>

6.promise 基本API

  • console.dir(Object);
    • 打印出该对象的所有属性和属性值.

实 例 方 法 : \color{red}实例方法: :

  • .then()
    • 得到异步任务执行成功的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值