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 ...
随机推荐
- Maven 仓库镜像设置
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>al ...
- Visual Studio编译Core程序部署到linux
一.背景 随着微软拥抱开源,推出Net Core框架,目前已经支持跨平台,能部署到Linux.MacOS.Windows等系统上. 下面我们就来分享一下Visual Studio编译好的代码部署到Li ...
- 12 props 传的是数组处理
<template> <div>InfoDetailed</div> </template> <script> export default ...
- 跟着尚硅谷系统学习Docker-【day03】
day03-20200715 p15.docker容器命令(下) 以守护进程的形式启动 [docker run -d 容器名]后台运行 启动了后又关闭了,与前台没有交互,立刻就kill了.前台 ...
- 20190923-06Linux文件权限类 000 014
文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定.在Linux ...
- 移动APP性能评测与优化
本文是<移动App性能评测与优化>的读书笔记. PS:说是读书笔记,其实就是摘录. 移动App的性能测试主要包括:内存使用情况.电量消耗.功能的流畅度等: 1. 内存 1.1 内存的主要组 ...
- xampp安装和使用:windows和linux使用安装微擎小程序
1.官网下载xampp XAMPP:Apache+MySQL+PHP+PERL,适用于windows+linux+macos x+Solaris等多系统使用 官网地址:https://www.apac ...
- 云计算openstack共享组件——时间同步服务ntp(2)
一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行加,而西时区则为减. 地球的轨道并非正圆,在加上自转速度逐年递减, ...
- matlab外部程序接口-excel
在excel中使用matlab 内容: 1.Spreadsheet Link 程序 安装与启动 1 打开excle->文件->选项 2.加载项->转到 3.浏览(可用加载宏,本来没有 ...
- TCP报文结构和长短连接
参考博文: https://www.cnblogs.com/onlysun/p/4520553.html https://blog.csdn.net/zxy987872674/article/deta ...