使用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. C# 通过 oledb 操作Excel

    public string GetConnectionString()         {             Dictionary<string, string> props = n ...

  2. spring和hibernate的整合

    阅读目录 一.概述 二.整合步骤 1.大致步骤 2.具体分析 一.概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让H ...

  3. 全景智慧城市常诚——没接触过VR全景的你就是目前VR最大的新闻

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

  4. [深圳/广州]微软SQL技术沙龙分享会(MVP)

    [深圳/广州] 新一期俱乐部活动报名开始,这次是广深地区SQL Server 技术沙龙分享会(MVP),SQL Server作为一个数据平台,不管是SQL Server 2017 on Linux 还 ...

  5. javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  6. JS中函数参数值传递和引用传递

    也许大家对于函数的参数都不会太在意,简单来说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样.深入研究,你会发现其实没那么简单,这个传参是要分俩种情况(其实这是个错误的说法 ...

  7. 基于Jmeter的轻量级接口压力测试(一)

    一.操作步骤: 1.在测试计划下新增一个线程组,并在线程组下新增一个http请求: 2.读取配置文件中的参数:在添加的http请求下添加配置元件-CSV DATA SET CONFIG 3.配置待测试 ...

  8. Hibernate.cfg.xml 主配置

    <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber ...

  9. 织梦dedecms单标签、双标签

    标签是dedecms的核心,dedecms的标签也跟html标签一样,同样分单标签和双标签. 我不会讲单标签有那些,双标签有那些,也不会叫大家去背那些是单标签,那些是双标签.如果去背这些标签,这样学起 ...

  10. SimpleDateFormat日期格式(浅面)

    java中使用SimpleDateFormat类的构造函数SimpleDateFormat(String str)构造格式化日期的格式, 通过format(Date date)方法将指定的日期对象格式 ...