使用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对象

实例:

GET请求

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

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是后台返回的参数,它包括以下属性:

 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>

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)
                    }
                    )
          } }

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

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

        <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"/>
        <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>

使用Vue-resource完成交互的更多相关文章

  1. vue前后台数据交互vue-resource文档

    地址:https://segmentfault.com/a/1190000007087934 Vue可以构建一个完全不依赖后端服务的应用,同时也可以与服务端进行数据交互来同步界面的动态更新. Vue通 ...

  2. vue教程1-09 交互 vue实现百度下拉列表

    vue教程1-09 交互 vue实现百度下拉列表 <!DOCTYPE html> <html lang="en"> <head> <met ...

  3. vue教程1-08 交互 get、post、jsonp

    vue教程1-08 交互 get.post.jsonp 一.如果vue想做交互,引入: vue-resouce 二.get方式 1.get获取一个普通文本数据: <!DOCTYPE html&g ...

  4. vue resource 携带cookie请求 vue cookie 跨域

    vue resource 携带cookie请求 vue cookie 跨域 1.依赖VueResource 确保已安装vue-resource到项目中,找到当前项目,命令行输入: npm instal ...

  5. Vue - 与后端交互

    零:与后端交互 - ajax 版本1 - 出现了跨域问题 前端:index.html <!DOCTYPE html> <html lang="en"> &l ...

  6. Vue之前后端交互

    Vue之前后端交互 一.前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责 ...

  7. 三、vue前后端交互(轻松入门vue)

    轻松入门vue系列 Vue前后端交互 六.Vue前后端交互 1. 前后端交互模式 2. Promise的相关概念和用法 Promise基本用法 then参数中的函数返回值 基于Promise处理多个A ...

  8. Vue Resource root options not used?

    I specify a root options in my Vue-Resource in my main.js file, but when I do the request, it does n ...

  9. vue -resource 文件提交提示process,或者拦截处理

    this.$http.post('url',fd||data,{emulateJSON:true}).then(fn(res){},fn(res){}) process成功案例 _self.$http ...

  10. vue resource 携带cookie请求 vue cookie 跨域(六)

    1.依赖VueResource  确保已安装vue-resource到项目中,找到当前项目,命令行输入: npm install vue-resource --save 在主方法添加 过滤 Vue.h ...

随机推荐

  1. python脚本 随机定位坐标

    import mathimport randomdef rad(dg):    return (dg * math.pi / 180)def deg(rd):    return (rd * 180 ...

  2. Innobackupex全备恢复(原理、演示)

    一.  Innobackupex恢复原理    After creating a backup, the data is not ready to be restored. There might b ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6964162.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(八)--My ...

  4. weather API 天气api接口 收集整理

    腾讯 http://sou.qq.com/online/get_weather.php?callback=Weather&city=南京 中国天气-weather.com.cn http:// ...

  5. HTML5录音控件

    最近的项目又需要用到录音,年前有过调研,再次翻出来使用,这里做一个记录. HTML5提供了录音支持,因此可以方便使用HTML5来录音,来实现录音.语音识别等功能,语音开发必备.但是ES标准提供的API ...

  6. sqlserver 游标写法

    1.简单游标 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 declare m_cursor cursor scroll for select  Address,People ...

  7. CI 数据库使用积累

    CI 数据库使用积累 一.      or_like使用 情景:WMS库存列表过滤器通过产品名称或者SKU查询. 通常此情况采用CI框架提供的or_like语句,如 $this->db-> ...

  8. 利用Border画三角形

    边框 1.边框其实并不是矩形,而是梯形 2.利用边框画三角形: div.a{ width:0px; height:0px; border:10px white solid; border-top-co ...

  9. javascript走马灯的效果(文档标题文字滚动)

    做一些网站的时候,文档标题会滚动,这个效果是走马灯的效果. <!DOCTYPE html> <html> <head> <meta charset=" ...

  10. 通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用

      前  言  PHP     学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输 ...