vue-ajax小封装实例


Posted in Javascript onSeptember 18, 2017

1. js 文件:

/*
* ajax封装:
* 1. 引入文件
* 2. new Vue().ajax.get(url,data,fn,ojson), 或 new Vue().ajax.post(url,data,fn,ojson)
* url: 需要获取数据的文件地址 (string)
* data: 需要发送的信息 (可省略) (obj)
* fn: 获取信息后的回调函数,接收到的返回值为data (function)
* ojson: 是否需要转换为json格式 (可省略) (设置为 "json")
*
* 3. new Vue().ajax.get().cancel(): 取消异步请求
* 4. new Vue().ajax.json(str): 可转化json格式字符串
**/
Vue.prototype.ajax={
 //添加url传送信息
 addUrl: function (url,obj){
  //如果省略url,则为post请求,令obj为url,令url为null
  if(arguments.length==1){
   obj=url;
   url=null;
  }
  //url不为空(get请求: 设置url信息)
  if(!!url){
   for(var k in obj){
    url += (url.indexOf("?")==-1 ? "?" : "&");
    url+=encodeURIComponent(k)+ "=" +encodeURIComponent(obj[k]);
   }
  }else{
   //post请求(设置data信息)
   url="";
   for(var k in obj){
    url+=encodeURIComponent(k)+ "=" +encodeURIComponent(obj[k]);
    url+="&";
   }
   //删除最后一个&
   var arr=url.split("");
   arr.pop();
   url=arr.join("");
  }
  //返回拼接好的信息
  return url;
 },
 get: function (url,data,fn,ojson){
  this.xhr=new XMLHttpRequest();
  //省略data时,即不发送数据
  if(typeof data =="function"){
   ojson=fn;
   fn=data;
   data={};
  }
  //合并url和data信息
  url=this.addUrl(url,data)
  //是否异步发送
  this.xhr.open("get",url,true);
  this.xhr.send(null);
  //当请求完成之后调用回调函数返回数据
  this.success(fn,ojson);
  //链式编程
  return this;
 },
 post: function (url,data,fn,ojson){
  this.xhr=new XMLHttpRequest();
  //省略data时,即不发送数据
  if(typeof data =="function"){
   ojson=fn;
   fn=data;
   data={};
  }
  //合并data信息
  data=this.addUrl(data);
  //是否异步发送
  this.xhr.open("post",url,true);
  this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  this.xhr.send(data);

  //当请求完成之后调用回调函数返回数据
  this.success(fn,ojson);
  //链式编程
  return this;
 },
 //字符串转换json
 json: function (str){
  return (new Function("return " + str))(); 
 },
 success: function (fn,ojson){
  //当请求完成之后调用回调函数返回数据
  var self=this;
  this.xhr.onreadystatechange=function (){
   var odata;
   if(self.xhr.readyState == 4){
    if((self.xhr.status>=200 && self.xhr.status<300) || self.xhr.status == 304){
     odata=self.xhr.responseText;
     //若为json则转化json格式
     if(ojson==="json"){
      odata=self.json(odata);
     }
     fn(odata);
    }else{
     odata="request was unsuccessful: "+self.xhr.status;
     fn(odata);
    }
   }
  }
 },
 //取消异步请求
 cancel: function (){
  this.xhr.abort();
  return this;
 }
}

2. html示例:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <div id="app">
  <button @click="getInfo">点击获取信息</button>
  <span>{{ msg }}</span>
 </div>

 <script src="vue.js"></script>
 <script src="vue-ajax.js"></script>
 <script>
  var vm=new Vue({
   el: "#app",
   data: {
    msg: "",
   },
   methods: {
    getInfo: function (){
     var self=this;
     this.ajax.get("1.json",{
      tel: 123456,
      address: "池州市"
     },function (data){
      self.msg=data[1].name
     },"json");
    }
   }
  })
 </script>
</body>
</html>

3. 需要获取的数据(1.json)

[
 {
  "name": "张三",
  "age": 18,
  "sex": "man"
 },
 {
  "name": "李四",
  "age": 20,
  "sex": "woman"
 },
 {
  "name": "王五",
  "age": 22,
  "sex": "man"
 }
]

4. 结果

vue-ajax小封装实例vue-ajax小封装实例

以上这篇vue-ajax小封装实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
jQuery模拟select实现下拉菜单功能
Jun 20 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
Angular2 路由问题修复详解
Mar 01 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
Vue实现点击按钮复制文本内容的例子
Nov 09 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
Aug 13 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
信息滚动效果的实例讲解
Sep 18 #Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
Sep 18 #Javascript
angularjs实现猜数字大小功能
May 20 #Javascript
angular指令笔记ng-options的使用方法
Sep 18 #Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 #jQuery
javascript  删除select中的所有option的实例
Sep 17 #Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 #Javascript
You might like
PHP5/ZendEngine2的改进
2006/10/09 PHP
php 全局变量范围分析
2009/08/07 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
php实现session共享的实例方法
2019/09/19 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
实习自荐信
2013/10/13 职场文书
证婚人经典证婚词
2014/01/09 职场文书
农民工讨薪标语
2014/06/26 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js