VUE中使用Vue-resource完成交互


Posted in Javascript onJuly 21, 2017

本文介绍了VUE中使用Vue-resource完成交互,分享给大家,具体如下

使用vue-resource

引入vue-resource

vue-resource就像jQuery里的$.ajax,是用来跟后端交互数据的,vue-resource是vue的一个插件,所以我们在开始使用vue之前,需要先引入vue-resource.js这个文件

<script src='js/vue.js'></script>
<script src='js/vue-resource.js'></script>

基本语法

// 基于全局Vue对象使用http
Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);
Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);


// 在一个Vue实例内使用$http
this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);
this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

在发送请求后,使用then方法来处理响应结果,then方法有两个参数,第一个参数是响应成功时的回调函数,第二个参数是响应失败时的回调函数。

options对象

VUE中使用Vue-resource完成交互

实例:

GET请求

在下面的实例中,我们做一个求和的功能,效果如下图:

VUE中使用Vue-resource完成交互

get方法:

this.$http.get('/someUrl', [options]).then(function(response){  
  // 响应成功回调
}, function(response){  
  // 响应错误回调
});

在该实例中,我们准备了一个php文件,该文件主要接收前台通过get传过来的参数,并计算两个参数的和,代码如下:

<?php
  $a=$_GET['a'];
  $b=$_GET['b'];
  echo $a+$b;
?>

html代码:

<div class="container" id="box" style="margin-top:100px">
  <input type="text" name="" id="" v-model="a" />+
  <input type="text" name="" id="" v-model="b" />
  =
  <input type="button" value="求和" class="btn btn-info" @click="add()"/>
</div>
<script type="text/javascript">
  new Vue({
    el:"#box",
    data:{
      a:"",
      b:""
    },
    methods:{
      add:function(){
        this.$http.get("get.php",{
          "a":this.a,
          "b":this.b
        }).then(function(response){
          alert(response.data)
        },function(response){
          alert(response.status)
        }
        )
      }
    }
  })
</script>

说明:response是后台返回的参数,它包括以下属性:

VUE中使用Vue-resource完成交互

 POST请求

<?php
  $a=$_POST['a'];
  $b=$_POST['b'];
  echo $a+$b;
?>
 
new Vue({
      el:"#box",
      data:{
        a:"",
        b:""
      },
      methods:{
        add:function(){
          this.$http.post("post.php",{
            "a":this.a,
            "b":this.b
          },{
            emulateJSON:true //POST请求需要将emulateJSON设置为true
          }).then(function(response){
            alert(response.data)
          },function(response){
            alert(response.status)
          }
          )
        }
      }
    })

JSONP

jsonp的语法跟get,post差不多,只是传递的数据不一样。接下来,我们用jsonp来完成一个百度搜索的功能。

1.首先准备一个实例的接口,这个接口是百度的搜索接口(我们可以自己找一些接口作为测试),如下:

https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=show

2.准备布局

<div class="container" id="box" style="margin-top:100px">
      <input type="text" placeholder="请输入搜索内容" />
      <ul>
        <li >22222</li>
      </ul>
      <p >暂无数据...</p>
    </div>

VUE中使用Vue-resource完成交互

3.功能描述

当我们在搜索框中输入搜索的内容的时候,下面的列表会显示出根据我们输入的内容联想的词语。按键盘的上下键,可以上下选择列表中的词语,按enter键的时候,会执行搜索

4.代码实现

首先我们准备一个myData数组,存放联想的词语。t1是input框输入的值,如下

<input type="text" placeholder="请输入搜索内容" v-model="t1" />
data:{
  myData:[],
  t1:""
}

在搜索框中的输入内容的时候,执行一个方法,这个方法主要用于发送一个请求,获取输入内容的联想词语。

<input type="text" placeholder="请输入搜索内容" v-model="t1" @keyup="search()"/>
methods:{
        search:function(ev){this.$http.jsonp("https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",{
            "wd":this.t1
          },{
            jsonp:"cb" //callback名字,默认是callback
          }).then(function(response){
            this.myData=response.data.s
          },function(response){
            alert(response.status)
          }
          )




}
        }

执行到这一步,列表中已经可以显示出我们搜索的联想词语了,如下图:

VUE中使用Vue-resource完成交互

下面的我们可以实现,按上下键的时候,选择词语 

<div class="container" id="box" style="margin-top:100px">
      <input type="text" v-model="t1" @keyup="search($event)" @keydown.down.prevent="changeDown($event)" @keydown.up.prevent="changeup()"/>
      <ul>
        <li v-for="(value, index) in myData" :class="{gray:index==now}">{{value}}</li>
      </ul>
      <p v-show="myData.length==0">暂无数据...</p>
    </div>
/*data数据*/
      data:{
        myData:[],
        t1:"",
        now:-1
      }
/*上下键的方法*/
        changeDown:function(){
            this.now++;
            if(this.now==this.myData.length){
              this.now=-1;
            }
            this.t1=this.myData[this.now];
        },
        changeup:function(){
            this.now--;
            if(this.now==-2){
              this.now=this.myData.length-1;
            }
            this.t1=this.myData[this.now];
        }

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>初识vue</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" rel="external nofollow" />
    <style type="text/css">
      .gray{
        background-color: gray;
      }
    </style>
  </head>
  <body>
    <div class="container" id="box" style="margin-top:100px">
      <input type="text" v-model="t1" @keyup="search($event)" @keydown.down.prevent="changeDown($event)" @keydown.up.prevent="changeup()"/>
      <ul>
        <li v-for="(value, index) in myData" :class="{gray:index==now}">{{value}}</li>
      </ul>
      <p v-show="myData.length==0">暂无数据...</p>
    </div>
  </body>
  <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
  <script src="js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
  <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  <script src="js/vue-resource.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript">
    //
    new Vue({
      el:"#box",
      data:{
        myData:[],
        t1:"",
        now:-1
      },
      methods:{
        search:function(ev){
        if(ev.keyCode==38 || ev.keyCode==40)return;
        if(ev.keyCode==13){
          window.open('https://www.baidu.com/s?wd='+this.t1);
          this.t1='';
        }          
          this.$http.jsonp("https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",{
            "wd":this.t1
          },{
            jsonp:"cb" //callback名字,默认是callback
          }).then(function(response){
            this.myData=response.data.s
          },function(response){
            alert(response.status)
          }
          )
        },
        changeDown:function(){
            this.now++;
            if(this.now==this.myData.length){
              this.now=-1;
            }
            this.t1=this.myData[this.now];
        },
        changeup:function(){
            this.now--;
            if(this.now==-2){
              this.now=this.myData.length-1;
            }
            this.t1=this.myData[this.now];
        }        
      }
    })
  </script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
全面解析Bootstrap中form、navbar的使用方法
May 30 Javascript
用js实现博客打赏功能
Oct 24 Javascript
JavaScript中return用法示例
Nov 29 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
jQuery中图片展示插件highslide.js的简单dom
Apr 22 jQuery
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
Jun 06 Javascript
vue的$http的get请求要加上params操作
Nov 12 Javascript
jQuery实现电梯导航模块
Dec 22 jQuery
es7学习教程之fetch解决异步嵌套问题的方法示例
Jul 21 #Javascript
js图片轮播插件的封装
Jul 21 #Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 #Javascript
AngularJS中使用three.js的实例详解
Jul 21 #Javascript
Axios学习笔记之使用方法教程
Jul 21 #Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 #Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
Jul 21 #Javascript
You might like
php仿ZOL分页类代码
2008/10/02 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
lib.utf.js
2007/08/21 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
python搭建微信公众平台
2016/02/09 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python实现最长公共子序列
2018/05/22 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
关于.NET, HTML的五个问题
2012/08/29 面试题
淘宝客服自我总结鉴定
2014/01/25 职场文书
料理师求职信
2014/01/30 职场文书
一名老师的自我评价
2014/02/07 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
党支部审查意见
2015/06/02 职场文书
2016年寒假生活小结
2015/10/10 职场文书