本文通过具体实例详解 Vue.js 如何使用 vue-resource 库进行三种常见数据交互:GET 获取静态文本、POST 提交表单数据至 PHP 后端,以及利用 JSONP 实现类似百度搜索的下拉联想功能。文章涵盖基础引入、代码编写及关键参数配置,帮助开发者快速掌握前后端数据通信的核心技巧。
GET 请求实现
一、GET 请求
首先,需要在页面中引入 vue.js 和 vue-resource.js 库,并准备一个用于触发请求的按钮。
<input type="button" value="按钮" @click="get()"/> //点击按钮请求数据函数get()
其次,创建一个简单的 txt 文件作为数据源,例如包含文本 'welcome vue'。
welcome vue
最后,编写 JavaScript 代码实现逻辑。在 window.onload 中初始化 Vue 实例,绑定 el 为 'body'。在 methods 中定义 get 函数,使用 this.$http.get 方法请求 'a.txt'。通过 .then 处理响应:成功时 alert 返回的 res.data,失败时 alert 状态码 res.status。
<script>
window.onload=function(){
new Vue({
el:'body', //主体为body,有套div时,此处为选择器
methods:{
get:function(){
this.$http.get('a.txt').then(function(res){
alert(res.data) //成功后,弹出请求数据
},function(res){
alert(res.status) //失败后,弹出请求状态码
})
}
}
})
}
</script>
POST 请求实现
二、POST 请求
同样引入 vue.js 和 vue-resource.js,并准备一个触发按钮。
<input type="button" value="按钮" @click="get()"/>
准备一个 PHP 后端文件(如 post.php),用于接收 POST 请求并处理数据。
<?php
$a=$_POST['a'];
$b=$_POST['b'];
echo $a-$b; //回显数据相减结果
?>
编写 JavaScript 代码。在 Vue 实例的 methods 中定义 get 函数,使用 this.$http.post 方法请求 'post.php'。发送参数 {a:1, b:2},并设置 emulateJSON: true 以标识 POST 请求。通过 .then 处理响应:成功时 alert 后端返回的计算结果 res.data,失败时 alert 状态码 res.status。注意此功能需在服务器环境下运行。
<script>
window.onload=function(){
new Vue({
el:'body',
methods:{
get:function(){
this.$http.post('post.php',{ //发送实参数据,进行运算(需要放在服务器环境)
a:1,
b:2
},{
emulateJSON:true //post的标识
}).then(function(res){
alert(res.data) //成功后弹出数据结果
},function(res){
alert(res.status) //失败后弹出状态码
})
}
}
})
}
</script>
JSONP 百度下拉列表实例
三、JSONP——百度下拉列表实例
引入 vue.js 和 vue-resource.js,并编写基础 CSS 样式(如 .gray 类用于高亮选中项)及 HTML 结构。HTML 包含一个输入框(绑定 v-model="t1" 和 @keyup="get($event)")以及一个列表(v-for 循环 myData,绑定 :class 和 {{value}})。
<style>
.gray{
background: #ccc; //按上下键时显示的文字背景颜色
}
</style>
<div id="box">
<input type="text" v-model="t1" @keyup="get($event)" @keydown.down="changeDown()" @keydown.up.prevent="changeUp()"/>
//按键传键值 get($event) 函数 //按向下键时 changeDown() 函数 //按向上键时 changeUp() 函数:阻止默认行为输入浮上移
<ul>
<li v-for="value in myData" :class="{gray:$index==now}">{{value}}</li>
//循环myData数据 绑定样式同时添加条件,下标值此时为几时,背景为灰
</ul>
<p v-show="myData.length==0">暂无数据...</p> //当数据长度为0时,显示暂无数据...
</div>
编写 JavaScript 代码。在 Vue 实例的 data 中定义 myData(数组)、t1(字符串)和 now(数字,初始为 -1)。在 methods 中定义 get 函数接收事件 ev。若 ev.keyCode 为 38(上)或 40(下),则 return 不请求数据;若为 13(回车),则打开百度对应搜索页面并清空输入框。此外,定义 changeDown 和 changeUp 函数处理键盘上下键,更新 now 值并同步输入框显示选中数据。
<script>
window.onload=function(){
new Vue({
el:'#box',
data:{
myData:[],
t1:'',
now:-1
},
methods:{
get:function(ev){ //接收事件
if(ev.keyCode==38||ev.keyCode==40)return; //如果事件为向上向下则return不请求数据
if(ev.keyCode==13){ //如果事件为回车
window.open('https://www.baidu.com/s?wd='+this.t1); //则打开百度对应t1值页面
this.t1=''; //清空输入框
}
this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{
wd:this.t1 //截取的搜索接口,发送数据为输入框此时输入的数据
},{
jsonp:'cb' //callback名字,默认为'callback'
}).then(function(res){
this.myData=res.data.s //将数据的s值赋给 myData
},function(res){
alert(res.status)
})
},
changeDown:function(){ //按下键时的函数
this.now++; //now下标值++
if(this.now==this.myData.length)this.now=-1; //如果下标值为数据长度,即最后一个时,为-1,跳到第一个
this.t1=this.myData[this.now] //输入框值为此时数据中选中的值
},
changeUp:function(){ //按上键时的函数
this.now--; //now下标值--
if(this.now==-2)this.now=this.myData.length-1 //如果下标值为-2,此时now=总长度-1,跳到最后一个
this.t1=this.myData[this.now] //输入框值为此时数据中选中的值
}
}
})
}
</script>
实现效果类似百度搜索的下拉联想功能,用户输入时动态获取并展示建议列表,支持键盘导航选择。
总结
以上所述是小编给大家介绍的三种数据交互形式 get post jsonp实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!