vue发送ajax请求详解


Posted in Javascript onOctober 09, 2018

vue本身不支持发送AJAX请求,需要使用vue-resource(vue1.0版本)、axios(vue2.0版本)等插件实现

axios是一个基于Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对vue-resource进行更新和维护

本文为大家介绍vue使用axios发送AJAX请求

首页安装并引入axios

1、npm install axios -S        #直接下载axios组件,下载完毕后axios.js就存放在node_modules\axios\dist中

2、网上直接下载axios.min.js文件

3、通过script src的方式进行文件的引入<script src="js/axios.min.js"></script>

axios基本使用方法

发送get请求

1、基本使用格式

格式1:axios([options]) #这种格式直接将所有数据写在options里,options其实是个字典

格式2:axios.get(url[,options]);

2、传参方式:

通过url传参

通过params选项传参

下面我们来看一个vue发送ajax get请求实例代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>发送AJAX请求</title>
  <script src="js/vue.js"></script>
  <script src="js/axios.min.js"></script>
  <script>
    window.onload=function(){
      new Vue({
        el:'#itany',
        data:{
          user:{
            name:'alice',
            age:19
          },
        },
        methods:{
          send(){
            axios({
              method:'get',
              url:'http://www.baidu.com?name=tom&age=23'
            }).then(function(resp){
              console.log(resp.data);
            }).catch(resp => {
              console.log('请求失败:'+resp.status+','+resp.statusText);
            });
          },
          sendGet(){
            axios.get('server.php',{
              params:{
                name:'alice',
                age:19
              }
            })
            .then(resp => {
              console.log(resp.data);
            }).catch(err => {       //
              console.log('请求失败:'+err.status+','+err.statusText);
            });
          },
        }
      });
    }
  </script>
</head>
<body>
  <div id="itany">
    <button @click="send">发送AJAX请求</button>

    <button @click="sendGet">GET方式发送AJAX请求</button>

  </div>
</body>
</html>

发送post请求(push,delete的非get方式的请求都一样)

1、基本使用格式

格式:axios.post(url,data,[options]);

2、传参方式

1、自己拼接为键值对

2、使用transformRequest,在请求发送前将请求数据进行转换

3、如果使用模块化开发,可以使用qs模块进行转换

4、注释:axios默认发送post数据时,数据格式是Request Payload,并非我们常用的Form Data格式,所以参数必须要以键值对形式传递,不能以json形式传参

下面看是一个vue发送ajax post请求实例代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>发送AJAX请求</title>
  <script src="js/vue.js"></script>
  <script src="js/axios.min.js"></script>
  <script>
    window.onload=function(){
      new Vue({
        el:'#itany',
        data:{
          user:{
            name:'alice',
            age:19
          },
        },
        methods:{
          sendPost(){
            // axios.post('server.php',{
            //     name:'alice',
            //     age:19
            // }) //该方式发送数据是一个Request Payload的数据格式,一般的数据格式是Form Data格式,所有发送不出去数据
            // axios.post('server.php','name=alice&age=20&') //方式1通过字符串的方式发送数据
            axios.post('server.php',this.user,{ //方式2通过transformRequest方法发送数据,本质还是将数据拼接成字符串
              transformRequest:[
                function(data){
                  let params='';
                  for(let index in data){
                    params+=index+'='+data[index]+'&';
                  }
                  return params;
                }
              ]
            })
            .then(resp => {
              console.log(resp.data);
            }).catch(err => {
              console.log('请求失败:'+err.status+','+err.statusText);
            });
          },
        }
      });
    }
  </script>
</head>
<body>
  <div id="itany">
    <button @click="send">发送AJAX请求</button>

    <button @click="sendGet">GET方式发送AJAX请求</button>

  </div>
</body>
</html>

上面我们所介绍的vue发送ajax请求都是在同一域名下进行的也就是同域或者说是同源

那么vue如何发送跨域的ajax请求呢?

vue发送跨域ajax请求

1、须知:axios本身并不支持发送跨域的请求,没有提供相应的API,作者也暂没计划在axios添加支持发送跨域请求,所以只能使用第三方库

2、使用vue-resource发送跨域请求

3、 安装vue-resource并引入   

npm info vue-resource           #查看vue-resource 版本信息

cnpm install vue-resource -S #等同于cnpm install vue-resource -save

4、基本使用方法(使用this.$http发送请求)

this.$http.get(url, [options])

this.$http.head(url, [options])

this.$http.delete(url, [options])

this.$http.jsonp(url, [options])

this.$http.post(url, [body], [options])

this.$http.put(url, [body], [options])

this.$http.patch(url, [body], [options])

下面再来看两个实例

向360搜索发送数据

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>发送AJAX请求</title>
  <script src="js/vue.js"></script>
  <script src="js/axios.js"></script>
  <script src="js/vue-resource.js"></script>
</head>

<body>
<div id="itany">
  <a>{{name}}</a>

  <button v-on:click="send">sendJSONP</button>

</div>
</body>
<script>
  new Vue({
    el: '#itany',
    data:{
      name: 'alice',
      age: 19
          },
    methods:{
      send:function(){
//        https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=a
        this.$http.jsonp('https://sug.so.360.cn/suggest',
          {params:{
            word:'a'
          }}
        ).then(function (resp) {
          console.log(resp.data)
        })

      }
    }
  })
</script>
</html>

vue发送跨域ajax请求带jsonp参数

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>发送AJAX请求</title>
  <script src="js/vue.js"></script>
  <script src="js/axios.js"></script>
  <script src="js/vue-resource.js"></script>
</head>
<body>
<div id="itany">
  <button v-on:click="send">向百度搜索发送JSONP请求</button>
</div>
</body>
<script>
  new Vue({
    el:'#itany',
    data:{
      name:'za'
    },
    methods:{
      send:function () {
        this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
          {params:{wd:'a'},
            jsonp:'cb', //百度使用的jsonp参数名为cb,所以需要修改,默认使用的是callbakc参数就不用修改
          }).then(function (resp) {
          console.log(resp.data)
        }).catch(function (err) {
          console.log(err)
        })
      }
    }


  })
</script>
</html>

Vue作为一个没有入侵性的框架并不限制你使用ajax框架

使用了Vue后,ajax部分你可以做如下选择:

1.使用JS原生XHR接口

2.引入JQuery或者Zepto 使用$.ajax();

3.Vue的github上提供了vue-resource插件 :

4.使用 fetch.js

5.自己封装一个ajax库

至于哪种方式适合自己的项目大家可以自行选择

Javascript 相关文章推荐
表单的一些基本用法与技巧
Jul 15 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
javascript事件委托的用法及其好处简析
Apr 04 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
Oct 14 jQuery
JQuery元素快速查找与操作
Apr 22 jQuery
微信小程序将字符串生成二维码图片的操作方法
Jul 17 Javascript
js实现开关灯效果
Mar 30 Javascript
vue把输入框的内容添加到页面的实例讲解
Nov 11 Javascript
原生js实现随机点餐效果
Dec 10 Javascript
AngularJS 监听变量变化的实现方法
Oct 09 #Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 #Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 #Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
Oct 09 #Javascript
angularJS1 url中携带参数的获取方法
Oct 09 #Javascript
AngularJS $http post 传递参数数据的方法
Oct 09 #Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
Oct 09 #Javascript
You might like
模仿OSO的论坛(五)
2006/10/09 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
php输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
javascript事件模型介绍
2016/05/31 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
python中shell执行知识点
2020/05/06 Python
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
高中毕业自我鉴定
2013/12/22 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
《口技》教学反思
2014/02/21 职场文书
毕业论文评语大全
2014/04/29 职场文书
教师党员整改措施
2014/10/24 职场文书
关于开学的感想
2015/08/10 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
python关于集合的知识案例详解
2021/05/30 Python