1、应用 axios 实现 Ajax 请求

实际开发中,通常需要和服务端进行数据交互。而 Vue.js 并未提供与服务端通信的接口。在 Vue.js 2.0 版本之后,使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端,具有如下的主要特点:

  • 从浏览器中创建 XMLHttpRequest
  • 从 node.js 发出 HTTP 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防止 CSRF/XSRF

2、axios 引入方式

在使用 axios 之前需要在页面引入 axios,主要的方式如下所示。

1. 直接下载并使用 < script > 标签引入

在 github 开源地址可以直接下载 axios 文件并使用 < script > 标签引入。

(1)进入 github 页面,找到 “Clone or download”超链接并用鼠标单击,如下图所示:

js 设置axios函数串行 js引入axios_js 设置axios函数串行

(2)用鼠标单击上图所示的 “Download ZIP” 超链接,弹出下载对话框,如下图所示。单击对话框中的“确定”按钮,即可将压缩文件夹下载到本地计算机上。

js 设置axios函数串行 js引入axios_javascript_02


对压缩文件夹进行解压,找到 axios-master\dist 文件夹下的 axios.min.js 文件。将该文件放置到项目的指定文件夹中,通常和 vue.js 文件统一放置在项目的 JS 文件夹中,然后在页面中使用下面的语句,将其引入到文件中。

<script type="text/javascript" src="JS/axios.min.js"></script>
2. 使用 CDN 方法

在项目中使用 axios,还可以采用引用外部 CDN 文件的方式。在项目中直接通过 < script > 标签加载 CDN 文件,代码如下:

<script src="https://unpkg.com/axios/dist/axios.min.js"><script>

2、GET 请求

使用 axios 发送 GET 请求有两种格式,介绍如下:
(1)第一种格式如下:

axios (options)

采用这种格式需要将发送请求的所有配置选项写在 options 参数中。示例代码如下所示:

axios ({
    method:'get', //请求方式
    url:'/user', //请求的URL
    params:{name:'jack',age:20}  //传递的参数
})

(2)第二种格式如下:

axios.get(url[,options])

参数说明如下:

  • url:请求的服务器 URL
  • options:发送请求的配置选项

示例代码如下:

axios.get('server.php',{
     params:{  //传递的参数
         name:'jack',
         age:20
     }
})

使用 axios 无论发生 GET 请求还是 POST 请求,在发送请求后都需要使用回调函数对请求的结果进行处理。.then 方法用于处理请求成功的回调函数,而 .catch 方法用于处理请求失败的回调函数。示例代码如下所示:

axios.get('server.php',{
	params:{ //传递的参数
		name:'jack',
		age:20
	}
}).then(function(response){
	console.log(response.data);
}).catch(function(error){
	console.log(error);
})

注意:这两个回调函数都有各自独立的作用域,直接在函数内部使用 this 并不能访问到 Vue 实例。这时,只要在回调函数的后面添加 .bind(this) 就能解决这个问题

在用户注册表单中,使用 axios 检测用户名是否被占用,关键代码如下所示:

<div id="box">
			<h2>检测用户名</h2>
			<form>
				<label for="type">用户名:</label>
				<input type="text" v-model="username" size="10">
				<span :style="{color:fcolor}">{{info}}</span>
			</form>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#box',
				data:{
					username:'',
					info:'',
					fcolor:''
				},
				watch:{
					username:function(val){
						axios({
							method:'get',
							url:'user.json'
						}).then(function(response){
							var nameArr = response.data; //获取响应数据
							var result = true; //定义变量
							for(var i=0;i<nameArr.length;i++){
								if(nameArr[i].name == val){ //判断用户名是否存在
									result =false;//为变量重新赋值
									break;
								}
							}
							if(!result){//用户名已存在
							    this.info='该用户名已被他人使用';
								this.fcolor='red';
							}
							else{ //用户名不存在
								this.info='恭喜,该用户未被使用';
								this.fcolor='green';
							}
						}.bind(this));
					}
				}
			});
		</script>

运行实例,在文本框中输入用户名,在文本框右侧会实时显示检测结果,运行结果如下所示:

js 设置axios函数串行 js引入axios_js 设置axios函数串行_03

3、POST 请求

使用 axios 发送 POST 请求同样有两种格式:
(1)第一种格式如下:

axios (options)

采用这种格式需要将发送请求的所有配置选项写在 options 参数中,示例代码如下所示:

axios ({
    method:'post', //请求方式
    url:'/user', //请求的URL
    data:'name=jack & age=20' //发送的数据
})

(2)第二种格式如下:

axios.post(url,data,[options])

参数说明如下:

  • url:请求的服务器 URL。
  • data:发送的数据。
  • options:发送请求的配置选项

示例代码如下:

axios.post('server.php','name=jack & age=20')

注意:axios 采用 POST 方式发送数据时,数据传递的方式有多种,其中最简单的一种是将传递的参数写成 URL 查询字符串的方式,例如,“name=jack & age=20”

在用户登录表中,使用 axios 检测用户登录是否成功,关键代码如下所示:

<div id="box">
			<div class="tile">用户登录</div>
			<form>
				<div class="one">
					<label for="type">用户名:</label>
					<input type="text" v-model="username">
				</div>
				<div class="one">
					<label for="type">密码:</label>
					<input type="password" v-model="pwd">
				</div>
				<div class="two">
					<input type="button" value="登录" @click="login">
					<input type="reset" value="重置">
				</div>
			</form>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#box',
				data:{
					username:'',
					pwd:''
				},
				methods:{
					login:function(){
						if (this.username =="" || this.pwd ==""){
						alert("请输入用户名或密码");
					}else{
						axios({
							method:'post',
							url:'searchrst.php',//请求服务器url
							//传递的数据
							data:'username='+this.username+'&pwd='+this.pwd
						}).then(function(response){
							if(response.data){//根据服务器返回的响应判断登录结果
								alert("登录成功");
							}else{
								alert("您输入的用户名或密码不正确");
							}
						}).catch(function(error){
							alert(error);
						});
					}
				}
			}
		});
		</script>

运行实例,在表单中输入用户名和密码,单击“登录”按钮后会显示登录结果(注意:在实例中由于服务器过期了,无法正常登录,但实例代码是可用的,如需登录,只需修改 axios 下的 url 服务器指向路径即可)。运行结果如下所示:

js 设置axios函数串行 js引入axios_javascript_04

备注:后期会继续跟进 Vue.js前端框架:单页 Web 应用,希望大家的多多支持和关注。