0

0

axios异步请求数据的使用(代码示例)

不言

不言

发布时间:2019-01-14 09:49:31

|

4569人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于axios异步请求数据的使用(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

使用Mock模拟好后端数据之后,就需要尝试请求加载数据了。数据请求选择了axios,现在都推荐使用axios。

axios(https://github.com/axios/axios)是基于 promise 的 HTTP 库。如官网文档介绍,npm i 之后,在需要的组件中加载就可以了。个人认为,编码的魅力在于,解决问题的方法不止一种,有时候这个方法在你的开发环境下ok,在我的开发环境下却不ok,所以,问题是各式各样的,而解决问题的方法也是百花齐放的。

axios的入门

1、安装

npm i axios -S

2、引入

在src目录下新建apis.js文件(项目逐渐完善的过程中会有很有个api接口,当然也可以命名为axios.js,命名是为了让别人看懂),并引入:

import axios from 'axios';

之后,编辑apis.js文件,考虑封装axios.get或post请求

3、apis.js文件的编辑

import axios from 'axios';
const Domain = "http://localhost:8080";  // 定义根域名
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; // 设置post默认的请求头

// 封装 post 请求
export function post(action, params){
  return new Promise((resolve, reject) => {
    // url 判断是测试环境 就要拿 测试环境的域名, 正式环境的就要用 正式域名
    let url = Domain + action;
    axios.post(url, params)
      .then(response => {
        resolve(response.data)
      })
      .catch(error => {
        reject(error)
      })
  });
}

 // 封装 get 请求

export function get(action, params){
  return new Promise((resolve, reject) => {
    axios.get(Domain + action, params)
      .then(response => {
        resolve(response.data)
      })
      .catch(error => {
        reject(error)
      })
  });
}

export default {
  postData(action, params){
    return post(action, params)
  },
  getData(action, params){
    return get(action, params)
  }
}

4、在需要的组件中进行引用

 import api from '../../apis.js';
 export default {
  name: "banner",
  data() {
    return {
      bannerList: []
    };
  },
  created(){
    this.getBanner(); // 在页面渲染完成即加载
  },
  methods: {
    getBanner(){
      this.$api.getData('/getBanner').then(val => {
        this.bannerList = val.imgs;
      });
    }
  }
}

5、全局配置axios

很多组件都需要请求数据,每用一次导入一次很麻烦,全局配置之后就不用在组件中导入了。

在入口文件main.js中引入,之后挂在vue的原型链上:

import api from './apis.js';
Vue.prototype.$http = api;

在组件中使用:

getBanner(){
    this.$http.getData('/getBanner').then(val => {
      this.bannerList = val.imgs;
    });
  }

6、axios结合vuex(在项目中还没用到,如果有问题,欢迎指正)

在vuex的仓库文件store.js中引用,使用action添加方法。action 可以包含异步操作,而且可以通过 action 来提交 mutations。action有一个固有参数context,但是 context 是 state 的父级,包含state、getters

import Vue from 'Vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)
export default new Vuex.Store({
 // 定义状态
  state: {
    banners: {
      name: 'pic'
    }
  },
  actions: {
    // 封装一个 ajax 方法
    saveBanner (context) {
      axios({
        method: 'get',
        url: '/getBanner',
        data: context.state.banners
      })
    }
  }
})

在组件中发送请求的时候,需要使用 this.$store.dispatch 来分发

企业网站在线超市131014
企业网站在线超市131014

这是一个在线展示企业网站范例的源代码,涉及36个行业分类近500个精美企业网站程序范例——不论是对美工还是程序员,都有相当高的参考价值! 使用 后台管理:登录用户为“admin”,登录密码为“admin888”,登录页面为“Manage.asp”。 包含“管理员管理/添加网站/管理网站/数据库和上传文件管理”的完整功能。 其他 请把数据库后缀名MDB改为ASP防下载,同时修改两个Conn.asp

下载
methods: {
  getBananer() {
  this.$store.dispatch('saveBanner')  // actions里的方法名
  }
}

异步加载的几种方法

1、$.ajax( url[, settings])

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
  type: 要求为String类型的参数,请求方式(post或get)默认为get。
  data:规定要发送到服务器的数据。
  async:布尔值,表示请求是否异步处理。默认是 true。
  dataType: 要求为String类型的参数,预期服务器返回的数据类型。
  contentType:要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。
  success:要求为Function类型的参数,请求成功后调用的回调函数。
  error:Function类型的参数,请求失败后调用的回调函数。
  jsonp:在一个 jsonp 中重写回调函数的字符串。

$(function(){
  $('#send').click(function(){
    $.ajax({
      type: "GET",
      url: "test.json",
      data: {username:$("#username").val(), content:$("#content").val()},
      dataType: "json",
      success: function(data){
        // handle success
      }
      error: function(data){
       // handle error
      }
      jsonp: ""
     });
   });
 });

2、$.ajax 的跨域请求问题

当Ajax请求的url不是本地或者同一个服务器的地址时,浏览器会报一个错误:No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin…………由于浏览器的安全机制,不能调用不同服务器下的url地址。基于此,jQuery.ajax给出了jsonp的解决方案: 把服务器返回的数据类型设置为jsonp。

 $(function(){
  $('#send').click(function(){
    $.ajax({
      type: "GET",
      url: "test.json",
      data: {username:$("#username").val(), content:$("#content").val()},
      dataType: "jsonp",   // jsonp格式
      success: function(data){
        // handle success
      }
      error: function(data){
       // handle error
      }
      jsonp: "callback"
     });
   });
 });

但是,jsonp是一种非官方的方法,而且这种方法只支持get请求,不如post请求安全。此外,jsonp需要服务器配合,如果是访问的是第三方服务器,我们没有修改服务器的权限,那么这种方式是不可行的。

3、vue框架中的vue-resource

ue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。vue-resource体积小,支持主流浏览器。不过,vue2.0之后就不再更新了,尤大神推荐使用axios。

{
   // GET /someUrl
  this.$http.get('/someUrl').then(response => {
   // get body data
  this.someData = response.body;
 }, response => {
   // error callback
 });
}

4、vue-resource的跨域请求问题

同样地,由于浏览器的安全机制,vue-resource也面临着跨域请求的问题。解决方案如下:在vue项目下的 config/index.js 文件里面配置代理proxyTable:

dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {    // 新增,解决跨域请求问题
      '/api': {
        target: 'http://192.168.1.103:8080/',
        changeOrigin: true,
        pathRewrite: {
          '`/api': '/'
        }
      },
      secure: false
    },
    
 target中写你想要请求数据的地址的域名

4、axios跨域请求的问题

与vue-resource一样,在vue项目下的 config/index.js 文件里面配置代理proxyTable:

 dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {    // 新增,解决跨域请求问题
      '/api': {
        target: 'http://192.168.1.103:8080/',
        changeOrigin: true,
        pathRewrite: {
          '`/api': '/'
        }
      },
      secure: false
    },

不过vue-resource和axios这两个方法,可能配置了代理proxyTable还是会报:No 'Access-Control-Allow-Origin' header is present on ……的问题,这需要后端服务器配合设置:

 header("Access-Control-Allow-Origin", "*");
 header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

151

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

396

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

504

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

187

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

120

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

176

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

39

2026.01.13

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 7.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号