分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

vue-ajax小封装

发布时间:2023-09-06 01:11责任编辑:熊小新关键词:暂无标签

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. 结果

5. 链接地址 ( https://github.com/hsiangleev/vue-ajax )

vue-ajax小封装

原文地址:http://www.cnblogs.com/hsianglee/p/7536099.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved