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 相关文章推荐
纯JS实现的批量图片预览加载功能
Aug 14 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
关于JS控制代码暂停的实现方法分享
Oct 11 Javascript
基于jquery实现控制经纬度显示地图与卫星
May 20 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
js中window.open()的所有参数详细解析
Jan 09 Javascript
SuperSlide2实现图片滚动特效
Jun 20 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
js点击返回跳转到指定页面实现过程
Aug 20 Javascript
Vue中自定义全局组件的实现方法
Dec 08 Javascript
小程序图片长按识别功能的实现方法
Aug 30 Javascript
微信小程序wx.request的简单封装
Nov 13 Javascript
信息滚动效果的实例讲解
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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
javascript如何写热点图
2015/12/08 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
js模块加载方式浅析
2017/08/12 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
在Django中创建动态视图的教程
2015/07/15 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
Python何时应该使用Lambda函数
2019/07/02 Python
Python列表切片常用操作实例解析
2019/12/16 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
总裁岗位职责
2013/12/04 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
结婚喜宴主持词
2014/03/14 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
2014年党建工作总结
2014/11/11 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
清明扫墓感想
2015/08/11 职场文书
护士心得体会范文
2016/01/25 职场文书