rxjs入门3之项目中ajax函数封装
项目中ajax函数封装
⽹页应⽤主要数据源有两个:⼀个是⽹页中的DOM事件,另⼀个就是通过AJAX获得的服务器资源。我们已经知道fromEvent这个操作符可以根据DOM事件产⽣Observable对象,相应的,RxJS还提供了另⼀个名为ajax的操作符,根据AJAX请求的返回结果产⽣Observable对象,当处理复杂的逻辑时,通过操作符组合实现数据流处理才能彰显威⼒,现在接触的还是创建类操作符,当接触到其他类型的操作符之后,会看到ajax的巧妙⽤法。
注释:下代码为react项目中ajax进行基础配置的封装
import { ajax} from 'rxjs/ajax';
function ajaxJson(type, url, data){
let localHost = window.location.host;
if (window.location.port) {
localHost = localHost.split(':')[0];
}
let URL = '//api.' + localHost + ':80/v1/'+url;
let config = {
url:URL,
method:type,
withCredentials: true,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
if(type ==='post'){
config['body'] = JSON.stringify(data);
}
else if(type === 'get'){
let ret = '?';
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
}
ret=ret.substring(0,ret.length-1);
config.url +=ret;
}
return ajax(config);
}
export {
ajaxJson
}
项目种ajax函数的使用
import {ajaxJson} from '../../tools/ajax.js';
//...
let data= {
page:1,
pageSize:10,
search:''
};
//请求错误处理函数,可放在tools 文件中
function errorData(err){
if(err.code ===404){
return '接口访问错误,请联系相关开发人员。'
}
if(err.response ===null || err.response ==='' || err.response.length > 50){
return '网络错误。'
}
return err.response;
}
//请求前的启动加载效果函数
async function asyncLoading(){
return new Promise((resolve,reject)=>{
that.setState({
loading:true //数据加载效果开启
},()=>{resolve('1')})
})
}
//获取接口数据函数
async function fetchData(){
await asyncLoading();
await ajaxJson('get','source/combineSourceList',data).pipe(
retry(1), //重试
// catchError(err=>of({response:[]})), //修复
map(data=>data.response),
)
.subscribe({
next:(data)=>{this.setState({
data:data,
loading:false, //数据加载效果结束
})},
error:(err)=>{
message.error(errorData(err));
this.setState({
loading:false, //数据加载效果结束
})
},
complete:()=>{
console.log('complete')
}
});
};
fetchData.call(this);
//...
rxjs入门3之项目中ajax函数封装的更多相关文章
- vue项目中的函数封装
项目中一般都会有fun.js这类的文件,里面有各种的如转换时间格式的,处理转换的等等函数方法. 其实经常用到的去获取基本数据的接口也可以封装成一个方法,方便复用. 如上面所标,获取列表数据之前需要先获 ...
- Ajax入门(二)Ajax函数封装
如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...
- js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)
js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...
- vue-axios的总结及项目中的常见封装方法。
前言 我们知道 vue 2.0版本开始推荐使用 axios 来完成前端 ajax 请求,axios 是一个基于Promise 的 http 库,可以用在浏览器和 node.js 中,axios 成为v ...
- 原生ajax函数封装
原生ajax函数 function ajax(json){ json=json || {}; if(!json.url){ return; } json.data=json.data || {}; j ...
- 项目中Ajax调用ashx页面中的Function的实战
前台页面: 使用几个display=none的空间存储DropdownList中的值,点击Search Button后刷新页面再次给DropdownList赋值使用 <%@ Page Langu ...
- 在vue项目中使用自己封装的ajax
在 src 目录下新建 vue.extend.js ,内容如下: export default { install(Vue) { Vue.prototype.$http=function(option ...
- 关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例
部署环境:Window 7 SP1+IIS7 成功方案: 其成功解决问题的几个重要因素如下: 1. 由于WebService默认不支持Get请求,所以要在Web.config配置文件内的& ...
- 关于项目中ajax 操作 原生项目遇到的问题
单选框动态赋值 $('input[name=pszt][value='+val+']').attr("checked",true); 置顶的几种方式 window.scrollTo ...
随机推荐
- Activiti7 组任务
需求:在流程定义中在任务节点的assignee固定设置任务负责人,这种情况不是很好,如果有天任务负责人请假了,你想请假,等着吧..没人审批,针对这种情况,可以给任务设置多个候选人,可以从候选中选择参与 ...
- Oracle12C安装配置文档
Oracle12C安装配置文档 Oracle12C安装配置文档 准备软件: 开始安装: 打开从官网下载下来的两个压缩包,进行解压 打开解压好的后缀为2of2的文件夹找到路径为database下的“ ...
- python3 while循环
python不支持n++这样格式,因为python中变量不像c那样事先定义好变量类型,在内存中开辟指定的空间,然后赋值. python中以字符串为例,事先在内存划分空间来存放字符串,然后用变量名来指向 ...
- Cloudera Manager和CDH安装部署
本次安装采用离线安装的方式,需要提前下载好需要的包. 1. 准备工作 1.1 环境说明 操作系统:RedHat企业级Linux6.5 64-bit Cloudera Manager:5.8.4 CDH ...
- openstack核心组件——glance— 镜像服务(6)
云计算openstack核心组件——glance— 镜像服务(6) 一.glance介绍: Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像 ...
- python身体指数BMI
问题需求 既要输出国际标准也要输出国内标准
- Java 里的 for (;;) 与 while (true),哪个更快?
在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for \\(\\s?;\\s? ...
- Linux安装指定版Git以及卸载
来自于:https://www.cnblogs.com/rstyro/articles/10817855.html 安装Git 在linux中,安装Git 一般一条命令即可,如下: Debian/U ...
- spring的初认识
spring的理解 1.spring是一个开源的免费框架(容器) 2.spring是一个轻量级的,非入侵式的框架 3.支持事务的处理,对框架的整合的支持 4.控制反转(ioc)和面向切口编程(aop) ...
- C# 中居然也有切片语法糖,太厉害了
一:背景 1. 讲故事 昨天在 github 上准备找找 C# 9 又有哪些新语法糖可以试用,不觉在一个文档上看到一个很奇怪的写法: foreach (var item in myArray[0..5 ...