player 发表于 2023-3-5 14:57:48

ajaxHooker更新版本后有问

            request.response = res => {
                // console.log(res);
                console.log(res.response.data.tasks);//原始是39

                let tasks = res.response.data.tasks;

                //弃用任务id
                const discardTasks = ['100421', '100410', '100409', '100400', '100399', '100382', '100381', '100380', '100376', '100370', '100365', '100364',
                  '100363', '100362', '100361', '100360', '100359', '100358', '100357', '100356', '100352'];


                //过滤弃用任务id
                const result = tasks.filter(task => {

                  if (!discardTasks.includes(task.task_id + '')) {

                        return task;

                  }

                });
                console.log(result); //自己修改后是18

                // result.push(newTask);

                res.response.data.tasks = result; //这里没成功

                console.log(res.response.data.tasks); //还是输出39

                //console.log(result.length);

                //value.response.data.total = 20;

            }
            
我原来是1.0.2版本的,更新到最新后不生效了。。。

!(data/attachment/forum/202303/05/145741c2q2lc27z2qdzwp5.png)

cxxjackie 发表于 2023-3-5 14:57:49

这个response是json类型吧,xhr在获取引用类型的响应时每次返回的都是一个深拷贝(确保只读),即:
xhr.response !== xhr.response
所以你前面的修改无法影响后面的读取。解决办法是保存一下response引用,然后在最后做一次赋值操作:
const response = res.response;
//...
response.data.tasks = result;
//...
res.response = response;
这样应该就可以了,后续我考虑能不能再优化一下。

player 发表于 2023-3-8 13:59:24

cxxjackie 发表于 2023-3-5 22:24
这个response是json类型吧,xhr在获取引用类型的响应时每次返回的都是一个深拷贝(确保只读),即:

所以 ...

可以了,不过确实比之前版本多走一步。

cxxjackie 发表于 2023-3-8 20:28:24

player 发表于 2023-3-8 13:59
可以了,不过确实比之前版本多走一步。

这个应该是可以优化的,后面版本我可能会做一次重构,代码太乱了,目前就先这样吧。1.2.x的改动挺大的,虽然用法上看不太出来,我已经尽量确保了跟旧版表现一致。
页: [1]
查看完整版本: ajaxHooker更新版本后有问