使用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. 全景智慧城市常诚——没接触过VR全景的你就是目前VR最大的新闻

    据调查,自2015年开始,VR(虚拟现实)技术在传媒行业中的应用呈现井喷式增长,各大国际主流媒体纷纷在新闻报道中使用VR技术.国内运用VR报道新闻最早在2015年12月,财新网利用VR技术对深圳山体垮 ...

  2. 手把手教你用Eclipse+TestNG搭建接口自动化测试框架

    转载于:http://qa.blog.163.com/blog/static/190147002201510275306185/ 把群博里关于接口自动化的文章都看了一遍,都是关于测试过程中遇到的问题及 ...

  3. docker - win7下构建swarm nodes实现跨host的容器之间的通信

    前言 之前在Linux环境下尝试了swarm,通过将不同host以swarm nodes 的方式连接到一起(构建Overlay 子网),从而实现跨host的container通信. 今天我们就来说说如 ...

  4. socket套接字编程

    一.概述 1.socket是一种进程间通信方式,既可以用于一台机器,也可以用于网络.常用语C/S模型. 2.可以跨越Windows和Linux操作系统,可以跨越不同语言. 3.注意网络字节序和主机字节 ...

  5. 使用hashCode()和equals()方法 - Java

    在这篇文章中,我将指出我对hashCode()和equals()方法的理解.我将讨论它们的默认实现以及如何正确地覆盖它们.我还将使用Apache Commons包中的实用工具类来实现这些方法. has ...

  6. Compare and Swap [CAS] 算法

    一个Java 5中最好的补充是对原子操作的支持类,如AtomicInteger,AtomicLong等.这些类帮助你减少复杂的(不必要的)多线程代码,实际上只是完成一些基本操作,如增加或减少多个线程之 ...

  7. python大规模爬取京东

    python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...

  8. Linux命令 文件备份归档恢复

    cp [功能说明] 文件的备份 英文xxxx  #cp命令将源文件复制到另外安全的地方,复制的文件和源文件是两个相互独立的文件,对认识一个文件的操作不影响另一个文件,但与符号链接文件中的硬链接是有区别 ...

  9. Vue实战Vue-cli项目构建(Vue+webpack系列之一)

    用Vue比较长一段时间了,大大小小做了一些项目,最近想总结一下知识点,出一个Vue+webpack系列,先从项目构建说起--vue-cli. 由于是Vue+webpack这里就不赘述git那些东西,默 ...

  10. Java基础知识整理(一)

    Java开发环境JDK(Java编辑器.Java运行工具(JRE作用).Java文档生成工具.Java打包工具) 1.Java是严格区分大小写的.2.Java程序中一句连续的字符串不能分开在两行书写, ...