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 this关键字的问题
Jan 09 Javascript
一个简单的javascript类定义例子
Sep 12 Javascript
理解JavaScript中的对象 推荐
Jan 09 Javascript
javascript动态创建表格及添加数据实例详解
May 13 Javascript
深入理解node exports和module.exports区别
Jun 01 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
JavaScript排序算法动画演示效果的实现方法
Oct 18 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
Dec 23 Javascript
Node.js的Mongodb使用实例
Dec 30 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 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调用数据库的存贮过程
2006/10/09 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python基本语法经典教程
2016/03/11 Python
Python reduce()函数的用法小结
2017/11/15 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
家长会主持词
2014/03/26 职场文书
十佳护士先进事迹
2014/05/08 职场文书
负责人任命书范本
2014/06/04 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
2014年接待工作总结
2014/11/26 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
团代会开幕词
2015/01/28 职场文书
2015学校年度工作总结
2015/05/11 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers