Wandering 发表于 2023-2-5 12:58:50

求助作用域问题

```
do {
      GM_xmlhttpRequest({
            url: FULL_URL,
            method: "GET",
            headers: getHeaders(),
            onload: function (xhr) {
                let data = JSON.parse(xhr.responseText);
                PAGE += 1;
                setTimeout(() => {
                  data.data.forEach(arr => {
                        const avatar = arr.userInfo.userAvatar;
                        const time = new Date(arr.dateline * 1000);
                        const content = arr.message;
                        const username = arr.username;
                        $('#feed-detail').append(replyArea);
                  })

                }, 1000);
            }
      });
    } while (data.data.length != 0);
```
如上,请问哥哥们,怎么才能在循环里访问`data`。
通过ajax请求的结果要怎么返回出来存在外面的变量😭

李恒道 发表于 2023-2-5 13:30:43

[油猴脚本开发指南]包装异步代码为同步代码
https://bbs.tampermonkey.net.cn/thread-883-1-1.html

steven026 发表于 2023-2-5 12:58:51

Wandering 发表于 2023-2-5 13:30
` Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data')`
data...

GM_xhr是异步的,没法用do while来重复请求
可以把GM_xhr这个请求包装成一个函数
在onload里面判断length,不符合要求就再调用这个函数直到符合要求

steven026 发表于 2023-2-5 13:17:25

```
let data;
do {
      GM_xmlhttpRequest({
            url: FULL_URL,
            method: "GET",
            headers: getHeaders(),
            onload: function (xhr) {
                data = JSON.parse(xhr.responseText);
                PAGE += 1;
                setTimeout(() => {
                  data.data.forEach(arr => {
                        const avatar = arr.userInfo.userAvatar;
                        const time = new Date(arr.dateline * 1000);
                        const content = arr.message;
                        const username = arr.username;
                        $('#feed-detail').append(replyArea);
                  })

                }, 1000);
            }
      });
    } while (data.data.length != 0);
```
在外部声明就行了

Wandering 发表于 2023-2-5 13:30:30

steven026 发表于 2023-2-5 13:17
```
let data;
do {


` Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data')`
data 还是未定义😵

我想通过请求获得一个array对象,如果长度不为0就继续请求。哥哥有什么好的实现方法吗

李恒道 发表于 2023-2-5 13:31:11

steven026 发表于 2023-2-5 13:17
```
let data;
do {


抓到哥哥偷懒了!
这次答案不干净

steven026 发表于 2023-2-5 14:11:59

李恒道 发表于 2023-2-5 13:31
抓到哥哥偷懒了!
这次答案不干净

具体逻辑我看都没看……🙄
页: [1]
查看完整版本: 求助作用域问题