项目中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函数封装的更多相关文章

  1. vue项目中的函数封装

    项目中一般都会有fun.js这类的文件,里面有各种的如转换时间格式的,处理转换的等等函数方法. 其实经常用到的去获取基本数据的接口也可以封装成一个方法,方便复用. 如上面所标,获取列表数据之前需要先获 ...

  2. Ajax入门(二)Ajax函数封装

    如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...

  3. js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)

    js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...

  4. vue-axios的总结及项目中的常见封装方法。

    前言 我们知道 vue 2.0版本开始推荐使用 axios 来完成前端 ajax 请求,axios 是一个基于Promise 的 http 库,可以用在浏览器和 node.js 中,axios 成为v ...

  5. 原生ajax函数封装

    原生ajax函数 function ajax(json){ json=json || {}; if(!json.url){ return; } json.data=json.data || {}; j ...

  6. 项目中Ajax调用ashx页面中的Function的实战

    前台页面: 使用几个display=none的空间存储DropdownList中的值,点击Search Button后刷新页面再次给DropdownList赋值使用 <%@ Page Langu ...

  7. 在vue项目中使用自己封装的ajax

    在 src 目录下新建 vue.extend.js ,内容如下: export default { install(Vue) { Vue.prototype.$http=function(option ...

  8. 关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例

    部署环境:Window 7 SP1+IIS7 成功方案: 其成功解决问题的几个重要因素如下: 1.       由于WebService默认不支持Get请求,所以要在Web.config配置文件内的& ...

  9. 关于项目中ajax 操作 原生项目遇到的问题

    单选框动态赋值 $('input[name=pszt][value='+val+']').attr("checked",true); 置顶的几种方式 window.scrollTo ...

随机推荐

  1. Google Code Jam 2020 Round1B Expogo

    题意 你初始位于\((0,0)\),然后你想要到\((x,y)\)去,第\(i\)步的步长是\(2^{i-1}\),要求用最少的步数走到\((x,y)\). 解题思路 首先可以推出,走\(i\)步可以 ...

  2. 【Java】一句话获得你的IP地址

    System.out.println(java.net.InetAddress.getLocalHost().getHostAddress());

  3. 关于Vue的那些事儿

    Vue 渐进式框架 众前端周知,Vue是一套用于构建用户界面的渐进式框架,自底向上逐层应用,关注视图层.那我们就来说道说道: 渐进式:声明式渲染->组件系统->客户端路由(router)- ...

  4. Linux(CentOS7)安装Tomcat (Tomcat+JDK)

    安装Tomcat首先要安装jdk,jdk和tomcat安装可以使用的方法:将jdk.tomcat上传到Linux,然后解压后使用,另一种方法是直接使用在线安装:yum 第一步:安装jdk,在Linux ...

  5. python基础:网络编程

    一.网络编程 简而言之,就是通过代码打开一个url,获得返回结果并做处理.通常所说的python爬虫,就属于网络编程 二.urllib模块进行网络编程 这个方法很繁琐,不建议使用.了解 示例1: 获取 ...

  6. [转载] 微软发布 SURFACE DUO ANDROID SDK 和模拟器

    模拟器截图 微软今天发布了双屏折叠设备 Surface Duo Android 开发工具(SDK 和模拟器),Windows 10X 开发工具和模拟器之后 2 月 11 日发布,并宣布了新的针对双屏体 ...

  7. oracle之三rman 不完全恢复

    rman 不完全恢复 9.1 rman 不完全恢复的三个标准模式:基于time.基于scn和基于sequence: 范例1:恢复过去某个时间点误操作,一般使用基于time或scn. 1)环境:有一套全 ...

  8. python 3 while嵌套

  9. 【高并发】面试官:Java中提供了synchronized,为什么还要提供Lock呢?

    写在前面 在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块.既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢?这是 ...

  10. nginx如何写日志

    写日志函数为ngx_log_error_core,位于src/core/ngx_log.c:89行核心代码如下:while (log) { if (log->log_level < lev ...