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 相关文章推荐
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
详解JavaScript数组的操作大全
Oct 19 Javascript
jqGrid表格应用之新增与删除数据附源码下载
Dec 02 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
May 24 Javascript
在页面中引入js的两种方法(推荐)
Aug 29 Javascript
JavaScript实现修改伪类样式
Nov 27 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
ajaxfileupload.js实现上传文件功能
Apr 19 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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
php表单提交问题的解决方法
2011/04/12 PHP
用php解析html的实现代码
2011/08/08 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python入门篇之函数
2014/10/20 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python中的pack和unpack的使用
2018/03/12 Python
利用Python如何生成便签图片详解
2018/07/09 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
使用python去除图片白色像素的实例
2019/12/12 Python
python可迭代对象去重实例
2020/05/15 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
印度服装购物网站:Limeroad
2018/09/26 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
环保口号大全
2014/06/12 职场文书
节约用电标语
2014/06/17 职场文书
青年联谊会致辞
2015/07/31 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android