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 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
JQuery查找DOM节点的方法
Jun 11 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
简单总结JavaScript中的String字符串类型
May 26 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
Sep 19 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 Javascript
JavaScript简单拖拽效果(1)
May 17 Javascript
React Router v4 入坑指南(小结)
Apr 08 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
Sep 26 Javascript
JS算法教程之字符串去重与字符串反转
Dec 15 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
PHP中的日期处理方法集锦
2007/01/02 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
python中使用序列的方法
2015/08/03 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
python测试mysql写入性能完整实例
2018/01/18 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
会计专业的自荐信
2013/12/12 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
党员公开承诺书
2014/03/25 职场文书
模具专业自荐信
2014/05/29 职场文书
2014年党小组工作总结
2014/12/20 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
浅谈怎么给Python添加类型标注
2021/06/08 Python
pandas中pd.groupby()的用法详解
2022/06/16 Python