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和CSS速查手册
Aug 20 Javascript
js文字滚动停顿效果代码
Jun 28 Javascript
小型js框架veryide.librar源代码
Mar 05 Javascript
Aptana调试javascript图解教程
Nov 30 Javascript
javascript面向对象的方式实现的弹出层效果代码
Jan 28 Javascript
浅析JavaScript中的CSS属性及命名规范
Nov 28 Javascript
网页实时显示服务器时间和javscript自运行时钟
Jun 09 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
webpack+vue中使用别名路径引用静态图片地址
Nov 20 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php 变量定义方法
2009/06/14 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP中echo和print的区别
2014/08/28 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
用python制作游戏外挂
2018/01/04 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
Python如何读取、写入JSON数据
2020/07/28 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
了解AppleTalk协议吗
2014/04/01 面试题
会计专业推荐信
2013/10/29 职场文书
司机检讨书
2014/02/13 职场文书
教师个人考察材料
2014/12/16 职场文书
小学运动会宣传稿
2015/07/23 职场文书
如何写好闭幕词
2019/04/02 职场文书
导游词之江南周庄
2019/12/06 职场文书
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers