TA的每日心情 | 衰 2023-2-16 01:48 |
---|
签到天数: 2 天 [LV.1]初来乍到
助理工程师
- 积分
- 10
|
发表于
2023-2-15 16:19:02
|
显示全部楼层
本帖最后由 清清清 于 2023-2-15 16:21 编辑
目前场景是,修改指定接口返回数据,数据也在其他接口上,如何实现这个功能呢?
目前解决方案,在send函数中发送异步请求(async await 不确定是否成功,对函数未发现影响,也可能是返回速度快),在load函数中可以拿到结果。但是send函数中没有请求地址。所以重写了open函数。
不知道大佬有没有更好的处理方案。
以下是代码
- function asyncPost(url, payload) {
- return new Promise((resolve, reject) => {
- GM_xmlhttpRequest({
- method: "POST",
- url: url,
- headers: { "Content-Type": "application/json" },
- data: JSON.stringify(payload),
- synchronous: true,
- onload: function (response) {
- console.log("asyncPost: " + url);
- resolve(response.responseText);
- },
- });
- });
- }
- function addXMLRequestCallback(callback) {
- var oldOpen, oldSend, i;
- if (XMLHttpRequest.callbacks) {
- XMLHttpRequest.callbacks.push(callback);
- } else {
- XMLHttpRequest.callbacks = [callback];
- oldOpen = XMLHttpRequest.prototype.open;
- XMLHttpRequest.prototype.open = function () {
- this.url = arguments[1];
- return oldOpen.apply(this, arguments);
- };
- oldSend = XMLHttpRequest.prototype.send;
- XMLHttpRequest.prototype.send = async function () {
- for (i = 0; i < XMLHttpRequest.callbacks.length; i++) {
- XMLHttpRequest.callbacks[i](this);
- }
- this.payload = JSON.parse(arguments[0]);
- if (this.url === "http://127.0.0.1:8080") {
- this.newResponseText = await asyncPost(this.url, this.payload);
- }
- oldSend.apply(this, arguments);
- };
- }
- }
- addXMLRequestCallback(function (xhr) {
- xhr.addEventListener("load", function () {
- if (this.readyState == 4 && this.status == 200) {
- console.log(this.url)
- if (this.url === "http://127.0.0.1:8080") {
- const resObj = JSON.parse(this.responseText);
- const newResObj = JSON.parse(this.newResponseText);
- Object.defineProperty(this, "responseText", {
- writable: true,
- });
- resObj.data.push(...newResObj.data);
- this.responseText = JSON.stringify(resObj);
- }
- }
- });
- });
复制代码
还有一个小问题,就是每次发送请求都会有一个弹窗,提示是否发送异步请求,这个可以关闭吗。
|
|