当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何在一个函数中使用GET请求结果赋值给一个公共变量,在另一个条件中确定公共变量一定被赋值?

司徒焕
2024-09-25

如何在一个函数中使用GET请求结果赋值给一个公共变量,另一个函数中调用函数,通过鼠标移动到页面元素时执行上一个函数,在另一个条件中确定公共变量一定被赋值后才在控制台输出

使用promise.resolve执行异步函数,只能在第二个函数调用中确定GET请求后的动作,第三步、第四步,无法再使用.then()执行控制台输出公共变量被赋值后的值

说明:
想在鼠标移动到页面元素时执行GET请求,尽早获取请求结果,如果在最后一个条件执行GET请求,再处理公共变量赋值的结果太延后了,倒是可以控制请求完成后执行
倒是可以在通过鼠标移动到页面元素时,执行GET请求函数,跳过第二个函数

油猴子中的完整代码
https://f.ws28.cn/f/f5zd76ncne5 复制链接到浏览器打开

请求函数

    var jhref;//定义公共变量

    function getWebsite(s) {

        let xhrResult = '';
        jhref = 'http://aaa.com';
            GM_xmlhttpRequest({
                method: 'GET',
                url: siteUrl,
                onload: function (result) {
                    xhrResult = result.status;
                    let domNew = new DOMParser().parseFromString(result.responseText, 'text/html');
                    let linkElement = domNew.querySelectorAll('.item>a')[0];

                    if(linkElement != undefined) {
                        jhref = linkElement.href.replace(linkElement.hostname, 'bbb.com');
                    } else {
                        xhrResult = 404;
                    }
                },
                onerror: function (result) {
                    console.log(result);
                },
            });

    }

第二个函数(iconArray是一个图标数组,style()是一个显示图标的函数,与图标显示同时执行上一个函数)

    function showBar(e, text) {
        Object.values(iconArray).forEach(function(value, index) {
            if(value.style.display == 'none') {//返回标签页鼠标点击事件不弹图标栏标志
                if(index === 2 ){
                    if(window.location.host.indexOf('db') > -1) {
                        jhref = text;
                        style(e, 0, value);
                    } else {
                        getWebsite(text);
                        style(e, 0, value);
                    }
                }
            }

        });
    }

通过鼠标移动到页面元素时执行第二个函数

            document.querySelectorAll(".title").forEach(function (value) {
                text = value.parentNode.href;
                value.addEventListener('mouseover', (e) => {
                    showBar(e, text);
                });
            });

在条件下执行打开公共变量链接(是鼠标移动到一个弹出的图标元素上的条件,一定是要在GET请求完成后执行,不管获取到结果值或者未获取到值)

window.open(jhref)

共有1个答案

锺离伟彦
2024-09-25

这个链接可能存在安全风险,为了保护您的设备和数据安全,请避免访问此链接。

 类似资料:
  • 我在下面有一个java程序: 现在,我想将两个字符串值“加纳”或“加纳”分配给“National”变量,这样当用户输入“加纳”或“加纳”时,当程序将“nation”值检查为“National”值,然后执行“if”块中的语句时,条件变为真。 但是有了我上面的代码,程序只有在用户输入“加纳”时才会执行“如果”语句;程序在用户输入“加纳”时才会执行“其他”语句。 请帮帮我。 谢谢你。

  • 为什么我不能这样做? 我得到: 致命错误:常量表达式包含无效操作 这有什么办法吗?

  • 组件提示框中的数据想展示在页面的别的位置,请问如何把echarts的组件提示框中的值赋值给另外一个变量?

  • 我试图用随机数创建10个变量,所有变量都以同一个单词开头,比如: -Foo1 -Foo2 -Foo3 -Foo4 我正在努力的是: 但是我不能让这个工作。 你们知道如何解决这个问题吗? 提前谢谢!

  • 请记住,这是在另一个组件中,因为我需要将该函数应用到CalculatorButton的onClick(CalculatorButton是另一个子组件)。

  • 问题内容: 如果我有这个: 我之前已定义,因此效果很好。 我的问题是在第6行中调用。我试图用相同的定义在第一个函数之外进行定义,但是即使调用,它也始终相同。 我希望每次调用第一个函数然后再调用第二个函数时,都具有一个不同的。 我能做到这一点,而不界定外? 问题答案: 是的,您应该考虑在一个类中定义您的函数,并使word成为成员。这比较干净 创建类后,您必须将其实例化为对象并访问成员函数。 另一种方