vue全家桶(3.1)
4.数据请求
4.1.axios是什么?
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有以下特征:
从浏览器中创建 XMLHttpRequest
从 node.js 发出 http 请求
支持 Promise API
拦截请求和响应
转换请求和响应数据
取消请求
自动转换JSON数据
客户端支持防止 CSRF/XSRF
在vue全家桶中,推荐使用,说白了就是用它来发送请求,和后端交互
4.2.简单使用
1.安装axios
npm install axios --save
2.使用axios发送get请求
在组件内部导入axios,这里以Demo1.vue为例:
import axios from 'axios'
在created中发送请求
created () {
axios.get('https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list')
.then((response) => console.log(response))
}
完整代码:
<template>
<div class="page">
</div>
</template>
<script type="text/javascript">
import axios from 'axios'
export default {
data () {
return {
}
},
components: {
},
created () {
axios({
method: 'get',
url: 'https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list'
})
.then((response) => console.log(response))
}
}
</script>
<style scoped>
</style>
上面代码中打印出来的内容是一个对象,里面的内容结构为:
{
// `data` 由服务器提供的响应
data: {},
// `status` 来自服务器响应的 HTTP 状态码
status: 200,
// `statusText` 来自服务器响应的 HTTP 状态信息
statusText: 'OK',
// `headers` 服务器响应的头
headers: {},
// `config` 是为请求提供的配置信息
config: {}
}
知识补充:在代码中使用到的后端地址是使用一个在线mock数据生成工具伪造的,具体工具如下
easy-mock地址: https://easy-mock.com
mockjs文档: https://github.com/nuysoft/Mock/wiki
mockjs案例: http://mockjs.com/examples.html
easy-mock的简单使用教程: http://blog.nodeing.com/archives/87.html
上面例子中使用get方式请求数据,其中get方式是默认的,因此,你也可以写成这样
axios('https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list')
.then((response) => console.log(response))
3.使用axios发送post请求
接下来,你可以尝试着去发送一下post方法了,使用方法和jquery中ajax方法类似
axios({
method: 'post',
url: 'https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/add'
})
.then((response) => console.log(response))
4.错误处理
你需要在catch里面处理错误,例如:
axios({
method: 'post',
url: 'https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/add/1'
})
.then((response) => console.log(response))
.catch((err) => console.log(err))
5.传递参数方式
get请求方式传参数,配置params选项就可以了
axios({
method: 'get',
url: 'https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list',
params: {
title: 'xxx',
count: 30
}
})
.then((response) => console.log(response))
注意:params里面的内容作为查询字符串和url一起发送
post请求方式传参数,配置data选项
axios({
method: 'post',
url: 'https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/add',
data: {
title: 'html最佳入门',
count: 80
}
})
.then((response) => console.log(response))
.catch((err) => console.log(err))
注意:data的内容作为请求体发送
4.3.请求方法的别名
为方便起见,为所有支持的请求方法提供了别名
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
举个例子,原来使用axios发送get请求我们写成这样
axios({
method: 'get',
url: 'https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list',
params: {
id: 10
}
})
.then((response) => console.log(response))
使用对应的别名发送,你可以写成这样
axios.get('https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list', {
params: {
id: 10
}
})
.then((response) => console.log(response))
其他请求方式使用方法和上面例子类似
4.4.处理并发请求
有时候,你想一次执行多个请求,可以使用all方法
function http1 () {
return axios.get('https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/list')
}
function http2 () {
return axios.post('https://easy-mock.com/mock/5c23887d3671d47be5ea8d66/axiosdemo/course/update')
}
axios.all([http1(), http2()]).then((response) => {
// 这里response返回一个数组 里面装了两个请求的返回结果
console.log(response)
})
上面代码中返回结果被放入到了一个数组中,如果想分别把结果拿出来,可以使用axios.spread方法
axios.all([http1(), http2()]).then(axios.spread((res1, res2) => {
// res1 对应http1的请求结果 res2对应http2的请求结果
console.log(res1, res2)
}))
螺钉课堂视频课程地址:http://edu.nodeing.com