Vue使用ajax(axios)请求后台数据的方法教程

目录
  • 前言:
  • Axios安装
    • 前台部分
    • 连接后台部分(node)
  • 总结

前言:

页面上那些数据,绝大部分都不是静态的数据,而是通过调用后台接口把数据渲染到页面上的效果。ajax可以帮助我们更好的去实现这一点,下面是详解在vue中如何使用它。

vue本身它是不支持直接发送ajax请求的,需要用到axios(一个基于promise的HTTP库,可以用在浏览器和node.js中)这是Axios文档的介绍,详细可查看:使用说明 · Axios 中文说明 · 看云

Axios安装

前台部分

1、npm安装

npm i axios -S     //有淘宝镜像的用    cnpm i axios -S

2、在vue中的main.js里引入

import axios from "axios";      //引入axios
Vue.prototype.$axios = axios;   //axios跟很多第三方模块不同的一点是它不能直接使用use方法,而是用这种方法

//配合文章第4步解释
axios.defaults.baseURL = 'http://127.0.0.1:3001'; //默认接口地址  //自己本地服务器测试  调用接口地址127.0.0.1本地服务器  3001是端口

3、 在methods里用this.$axios来调用它(注意:这里用的是get请求):

Get请求

data() {
    return {
      icon_arr:[],//刚开始为空,在create或mounted里面调用icon接口
},
created() {
    //this.icon();//个人比较喜欢用mounted调用接口
},
mounted() {
    this.icon();
},
methods:{
    icon() {
      this.$axios
        .get("http://127.0.0.1:3001/index/icon", {    //127.0.0.1是本地服务器     3001是端口号
        //.get("/api接口/函数名", {
          params: {
              //传到后台的数据参数
              //id:this.$route.query.id,     //当前页面地址栏中url参数名为id的参数值
              num:this.$route.query.id,      //多个数据像这样用
              one:this.$route.query.one
          },
        })
        // 在后台查询信息 返回res结果
        .then((res) => {
          // 查询失败
          //后台成功code==200,其他值报错
          if (res.data.code != 200) {
            // 提示信息
            return this.$toast({    // toast是vant组件(要安装和引入才能提示)
              message: "获取icon图片失败",
              icon: "fail",
            });
          }
          // console.log(res.data.results);   //  打印后台传给前台的数据
          // 查询成功,把结果赋给icon_arr
          this.icon_arr = res.data.results;
        }).catch((error)=>{
          //报错
      	});
    },
}

4、没有优化默认接口之前,一步一步写接口很麻烦。如下

http://127.0.0.1:3001/index/icon

this.$axios
        .get("http://127.0.0.1:3001/index/icon", {    //127.0.0.1是本地服务器     3001是端口号
          params: {

          },
        })
        // 在后台查询信息 返回res结果
        .then((res) => {

        }).catch((error)=>{
          //报错
      	});

我们可以通过在main.js添加这行代码: (接口地址:端口号)

axios.defaults.baseURL = 'http://127.0.0.1:3001';

之后我们就可以简单的写成

this.$axios
        .get("/index/icon", {
          params: {

          },
        })
        // 在后台查询信息 返回res结果
        .then((res) => {

        }).catch((error)=>{
          //报错
      	});

连接后台部分(node)

node_api文件目录

node_api

-database文件夹————数据库

–db.js—————————-连接数据库池

-node_modules文件夹—-node模块

-routers文件夹—————路由

–index.js————————路由文件

-app.js—————————运行

-package.json—————-配置文件、安装模块

先安装package,json里面的配置,查看dependencies里面的安装

基本上就是按下面的格式安装

//npm安装
npm i express -S
npm i mysql -S
npm i ws -S
....

//或者淘宝镜像安装
cnpm i express -S
cnpm i mysql -S
cnpm i ws -S
....

db.js基本模板

var mysql = require('mysql');
var pool = mysql.createPool({
    host: '0.0.0.0',         //本地服务器
    user: 'root',             //数据库用户名
    password: '123456', //数据库密码
    database: 'hao'          //数据库名
});

//数据库池
function  query(sql, values, callback) {
    // console.log("db pool");
    pool.getConnection(function (err, connection) {
        if(err) throw err;
        // console.log("get connection ");
        //Use the connection
        connection.query(sql, values,function (err, results, fields) {
            // console.log(JSON.stringify(results));
            //每次查询都会 回调
            callback(err, results);
            //只是释放链接,在缓冲池了,没有被销毁
            connection.release();
            if(err) throw err;

        });

    });
}

exports.query = query;

routers路由,里面的js是接口名,js里面的是函数名

index.js

const express = require('express')    //引入express框架
const db = require('../database/db')  //引入数据库
const router = express.Router()       //引入路由

router.get('/icon', (req, res, next) => {
    //  前台用get请求,就用query来接收参数
    let table_name = req.query.table_name;
    let sql = `select * from ${table_name}`;//mysql语句
    db.query(sql, [], (err, results) => {
        if (err) {
            //报错
            console.log(err);
        }
        res.send({
            //成功返回给前台results数据结果
            code: 200,
            results: results,
        })
    })
})

module.exports = router

app.js

let express = require('express')   //引入express
let app = express()

let indexRouter = require('./routers/index')

//设置跨域访问
app.all("*", function (req, res, next) {
    //设置允许跨域的域名,*代表允许任意域名跨域
    res.header("Access-Control-Allow-Origin", "*");
    //允许的header类型
    res.header("Access-Control-Allow-Headers", "content-type");
    //跨域允许的请求方式
    res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
    if (req.method.toLowerCase() == 'options')
        res.send(200);  //让options尝试请求快速结束
    else
        next();
})

app.use(express.json())
app.use(express.urlencoded({ extended: false }))

app.use('/index', indexRouter)

app.listen(3001,console.log('success'))   //3001是端口号   打印,成功时显示success

输入命令行 node app.js 来启动

总结

到此这篇关于Vue使用ajax(axios)请求后台数据的文章就介绍到这了,更多相关Vue请求后台数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue如何处理Axios多次请求数据显示问题

    目录 Vue处理Axios多次请求数据显示 服务端代码 客户端代码 vue axios多次请求一个接口取消前面请求 方法一 方法二 总结 Vue处理Axios多次请求数据显示 场景: 一个搜索框,要求用户输入内容改变之后立即进行搜索 遇到的问题: 用户频繁的进行搜索词修改,会触发很多次搜索请求,如果请求有延时,就会出现显示不正确的现象 比如下面这个例子: 请求1发出后,存在延时大,响应1后返回: 请求2发出后,延时小,响应2先返回: 最后显示的内容是响应1: 而我期待的显示内容,是最后一次的请求

  • Vue axios库避免重复发送请求的示例介绍

    目录 目的 文件结构 实现 请求拦截 响应拦截 取消重复发送请求 调用 目的 实现请求拦截 实现响应拦截 常见错误处理 不能请求头设置 api 集中式管理 (取消重复请求,重复发送请求, 请求缓存等情况均还未实现) 文件结构 实现 index.js内代码如下: 引入 // 引入 axios import axios from 'axios'; // 请求配置单独写一个文件 baseurl.js import serverConfig from './baseurl.js' 创建一个实例 cons

  • vue axios接口请求封装方式

    目录 vue axios接口请求封装 总结 vue axios接口请求封装 简易记录一下最近用到的比较顺手的.axios接口请求的封装 1.新建network文件夹,其内新建request.js 设置一个 baseURL ,便于为axios实例传递相对url 2.新建api文件夹,其内新建index.js.home.js index.js主要是为了便于导出可能有多个页面相关的请求 home.js中主要封装有关home页的请求操作,这里名字随便取即可 3.在main.js中导入/api/index

  • Vue之Axios的异步请求问题详解

    目录 遇到的问题 总结 遇到的问题 在目前一个需求中,我需要等待axios请求完成后,判断请求是否出现异常,然后来判断是否关闭弹窗 修改后大概代码如下: async submitForm() { let flag = false //表单验证,默认通过 let formValidation = true this.$refs['vForm'].validate(valid => { if (!valid){ formValidation = false } //TODO: 提交表单 }) if

  • Vue简单封装axios网络请求的方法

    目录 Vue简单封装axios网络请求 一.utils下的httpUtils.js: 二./api下的path.js: 三./api下的index.js: 四.组件中引入并请求: Vue简单封装axios网络请求 一.utils下的httpUtils.js: import axios from 'axios'; import querystring from 'querystring'; const errorHandler = (status, info) => { switch(status

  • 关于Ajax异步请求后台数据进行动态分页功能

    ajax请求后台拿到json类型的数据后,可以在它的success回调方法中进行动态分页,也就是表格重绘,此时,我们需要得到的数据包括:查询得到的数据.数据总条数.总页数.当前页数,其中前三条可在后台获取,对于当前页数,需要从前端获取点击页数再通过请求传递给后台,后台做完相应处理后再传回给前端. 请看如下例子: /** * * @param page 当前页 */ function getData(page){ var schoolid = $("#schoolid option:selecte

  • 在Vue中使用axios请求拦截的实现方法

    一.前言 axios的基础使用就不过多的讲解啦,如何使用可以看axios文档使用说明·Axios中文说明 在这里和大家分享一下axios拦截在实际项目中的使用 很多人都看过axios的官方文档中拦截器这一栏,有的人可能会有点懵,因为文档只告诉你有这个东西,而不告诉你在什么情况下使用.很多初学者就会放弃使用axios拦截器,毕竟拦截器是可以不使用的,但是使用拦截器,会在页面中减少很多不必要的代码. 二.说在前面的 项目使用的ui框架是iview 以下友好提示均使用iview ui的message提

  • vue element table 表格请求后台排序的方法

    1.ElementUi文档已经说了,如果需要后端排序,需将sortable设置为custom,同时在 Table 上监听sort-change事件,在事件回调中可以获取当前排序的字段名和排序顺序,从而向接口请求排序后的表格数据. <el-table :data="playerTableData" border style="width: 100%" :default-sort = "{prop: 'outlay', order: 'descendin

  • vue本地模拟服务器请求mock数据的方法详解

    目录 原因 场景 方法 mock资源 配置 vue.config.js + settings.js .env.development + .env.production mock-request.js table.js mockDataTest 代码 总结 原因 1.mockjs本地开发的时候用还好,mock数据需要生产时候用就不大行了 2.mock的数据通过module.exports.export实现的时候,npm run build 生产打包的时候,这些假数据会打包进app.js文件里面,

  • vue项目及axios请求获取数据方式

    目录 一.首先导入用到的组件和axios 二.在data中将要用到的数据给一个初始值,为空 三.在methods中写方法,发送axios获取数据 四.传递数据 五.封装 axios axios拦截器 一般vue项目中 一个页面是由多个组件组成的,各个组建的数据都是统一在主界面的组件中发送axios请求获取,这样极大地提高了性能. 一.首先导入用到的组件和axios import HomeHeader from './components/Header' import HomeSwiper fro

  • jQuery Ajax请求后台数据并在前台接收

    1.前台使用jQuery ajax请求 $.ajax({ url: "r_getRolePer.action", dataType:'json', data: {userId:"1"}, //请求的附加参数,用json对象 method:'POST', success: function(data){ $.messager.alert('消息',data.add,''); //这里使用的时easyui的格式 }, }); 2.在action里面使用response.

  • jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法

    jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Object.success,但后台能够返回数据,原代码如下: var source=[]; $.ajax({ type: "post", url: "connectdb/select.jsp", data: {database: "scmdb", selec

  • vue如何解决axios请求前端跨域问题

    目录 前言 一.为什么会出现跨域的问题? 二.解决方案 跨域资源共享(CORS) 写在最后 前言 最近在写纯前端的vue项目的时候,碰到了axios请求本机的资源的时候,出现了访问报404的问题.这就让我很难受.查询了资料原来是跨域的问题. 在正常开发中跨域问题有很多的解决方案.最常见的就是后端修改响应头.但是前端也可以解决,通过反向代理.为了防止下一次这样的错误出现,记录一下,总结一下. 所以现在我们来复盘一下,然后解决掉. 一.为什么会出现跨域的问题? 跨域:浏览器从一个域名的网页去请求另一

  • 有关文件上传 非ajax提交 得到后台数据问题

    下文给大家介绍文件上传非ajax提交得到后台数据的操作方法,具体详情如下所示: <form name="configForm" id="configForm" method="post" action="" > .......... </form> 根据id获得表单数据然后发送ajax请求,获得后台返回数据,处理数据,完美. 但是如果需要上传文件, <tr> <td class=&qu

  • Vue项目利用axios请求接口下载excel

    本文实例为大家分享了Vue项目利用axios请求接口下载excel的具体代码,供大家参考,具体内容如下 据我了解的前端的下载方式有三种,第一种是通过a标签来进行下载,第二种时候通过window.location来下载,第三种是通过请求后台的接口来下载,今天就来记录一下这三种下载方式. 方法一:通过a标签 // href为文件的存储路径或者地址,download为问文件名 <a href="/images/logo.jpg" rel="external nofollow&

随机推荐