一文带你学懂axios

1,049 阅读2分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

学习axios之前,先了解一个别的名词就是ajax, ajax的全称Asynchronous JavaScript and XML ,也就是异步加载的javascript 和 XML。
ajax主要是用来实现页面和服务器之间的数据传输。

Vue本身是不支持发送ajax请求的,需要使用第三方插件,而axios就是Vue2.0官方推荐的一个插件。

axios的作用:用来发送ajax请求的小插件,它是对ajax的封装。

1.promise对象

Axios是基于Promise的HTTP库,那么什么是Promise呢?其实简单理解就是一个容器,里面保存着某个未来才会结束的事件,代表着异步操作。Promise有三种状态,pending(进行中)、fulfilled(已成功)、rejected(已失败)。

function ajax(URL) {
	return new Promise(function (resolve, reject) {
		var req = new XMLHttpRequest(); 
		req.open('GET', URL, true);
		req.onload = function () {
		if (req.status === 200) { 
				resolve(req.responseText);
			} else {
				reject(new Error(req.statusText));
			} 
		};
		req.onerror = function () {
			reject(new Error(req.statusText));
		};
		req.send(); 
	});
}
var URL = "/try/ajax/testpromise.php"; 
ajax(URL).then(function onFulfilled(value){
	document.write('内容是:' + value); 
}).catch(function onRejected(error){
	document.write('错误:' + error); 
});

通过Promise对象的then方法可以接收异步操作成功的回调函数;通过catch捕获异常,可以接收异步操作失败的回调函数。 其中,resolve在异步操作成功时操作,并将异步操作的结果作为参数传递出去;reject在异步操作失败时调用,并将异步操作报出的错误作为参数传递出去。

2.使用axios发送ajax请求

axios基本语法

(1)axios([options]) 该方法既可以发送get请求,也可以发送post请求。options为axios方法的参数,有三个参数,method表示请求的方式类型,url表示请求的地址,responseType表示后端返回的数据类型,可以不指定。

methods:{
    send:function(){
        axios({
            method:'get',
            url:''
        })
        .then(function(resp){
            console.log(resp);
        }).catch(err=>{
            console.log('请求失败');
        })
    }
}

(2)axios.get(yrl,[options])

methods:{
    sendGet(){
        axios.get('请求地址')
        .then(resp=>{
            console.log(resp.data)
        })
        .catch(err=>{
            console.log("请求失败")
        })
    }
}

get方法传参有两种方式,第一种就像上面代码中的直接放在url后面,也可以通过params选项传递参数。

axios.get('url',{
    params:{
        name:'yu',
        age:25
    }
})

(3)axios.post(url,[,data[,config]])
第一个参数为请求处理的服务器端程序,第二个参数为数据,第三个参数为选项可以不写

methods:{
    sendpost(){
        axios.post('url',{
            name:'yu',
            age:25
        })
        .then(resp=>{
            console.log(resp.data)
        })
        .catch(err=>{
            console.log("请求失败")
        })
    }
}

3.优点:

(1)对象的状态不受外界影响,promise对象的三种状态。只有异步操作的结果。可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

(2)一旦状态改变,就不会再改变,任何时候都可以得到这个结果。他的状态改变只有两种可能从pending变成resolved和从pending变成rejected。只要这两种情况发生。状态就凝固了,不会再变了,会一直保持这个结果。