Ecology中拦截jquery.ajax请求接口后的数据
功能:获取调用接口之后的数据在进行返回参数重写
首先ecology中一般直接看不到源码的,为什么知道是jquery.ajax请求呢,需要用到开发者工具
点开这里之后就能知道调用接口具体走的是什么逻辑然后返回值又做了哪些操作
一般来说,文件有前置加载和后置加载,就拿我这来说,我的就是前置加载一般是在/cloudstore/dev/init.js中,可以直接在文件里面搜索。但是搜索就不一样了,前后置文件都可以搜。然后就是用ecode开发工具开发编写js文件了,注意之前用的谷歌有问题,在ecode上无法创建文件,但是电脑自带edge就没问题,上重点:
一般来说拦截ajax请求可以用
$( document ).ajaxSuccess(function( event, request, settings ) {console.log(request.status);});
但是这个方法,在请求时是没有请求后的数据的,感觉像是请求前的处理,不像下面的方法可以获取请求后的数据,然后对返回数据进行操作
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {var origSuccess = options.success;options.success = function (response) {if (origSuccess) {origSuccess.call(this, response); // 调用原始的success回调}};});
完整代码
let enable = true;
let isRun = false; //控制执行次数
const runScript = () => { //代码块钩子,类似放在代码块中或者jquery.ready//可操作WfForm,以及部分表单dom hiden、ReactDOM.renderisRun = true; //确保只执行一次$.ajaxPrefilter(function (options, originalOptions, jqXHR) {var origSuccess = options.success;options.success = function (response) {// 在这里根据url啥的进行数据修改或检查响应数据===============================if (origSuccess) {origSuccess.call(this, response); // 调用原始的success回调}};});
}
//利用组件复写此处是所有的头部适用所有
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop', {fn: (newProps) => {//原始流程操作,组件加载,等等===================if (isRun) return; //执行过一次就不执行runScript(); //执行代码块}
});