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 相关文章推荐
JavaScript 三种不同位置代码的写法
Oct 25 Javascript
Javascript this 的一些学习总结
Aug 31 Javascript
jquery简单的弹出层浮动层代码
Apr 27 Javascript
浅谈javascript语法和定时函数
May 03 Javascript
js生成随机数的方法实例
Oct 16 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
详解Javascript数据类型的转换规则
Dec 12 Javascript
详解JavaScript RegExp对象
Feb 04 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
微信小程序自动客服功能
Nov 02 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
详解Element-UI中上传的文件前端处理
Aug 07 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警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
javascript parseInt 大改造
2009/09/27 Javascript
js切换光标示例代码
2013/10/10 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
python快速排序代码实例
2013/11/21 Python
寻找网站后台地址的python脚本
2014/09/01 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
PyQt 如何创建自定义QWidget
2021/03/24 Python
《爱如茉莉》教后反思
2014/04/12 职场文书
2014年营业员工作总结
2014/11/18 职场文书
北京英文导游词
2015/02/12 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书