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 相关文章推荐
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 Javascript
yepnope.js 异步加载资源文件
Sep 08 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 Javascript
纯js实现遮罩层效果原理分析
May 27 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
Sep 01 Javascript
js中this的用法实例分析
Jan 10 Javascript
javascript鼠标滑动评分控件完整实例
May 13 Javascript
vue全局使用axios的方法实例详解
Nov 22 Javascript
小程序server请求微信服务器超时的解决方法
May 21 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
Sep 18 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 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
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
jQuery.each使用详解
2015/07/07 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
vuex 的简单使用
2018/03/22 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
python抓取最新博客内容并生成Rss
2015/05/17 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
试用期员工考核制度
2014/01/22 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
解放思想演讲稿
2014/09/11 职场文书
导游词之崇武古城
2019/10/07 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python