【问题标题】:How can I return variable from the correct JS scope?如何从正确的 JS 范围返回变量?
【发布时间】:2009-08-27 14:49:07
【问题描述】:

我正在使用 JS 和 Adob​​e AIR 进行一些开发。我想要做的是创建一个对远程网站的请求(例如用于身份验证)。

这个问题与 AIR 无关,这是一个 JS 问题,我无法正确处理。我想要做的是检索请求正文,但如果我只返回“str”var,它会显示“undefined”。我试图在函数内“全局”声明它,但它没有用。我猜我忽略了一些范围问题。

        function doRequest(url){
            var req = new XMLHttpRequest();

            req.onreadystatechange = function(){
                if (req.readyState == 4) {
                    var str = req.responseText;
                    runtime.trace("deRequest result: " + str);

                        return str;
                }
            };
            req.open('GET', url, true);
            req.send(null);
        }

【问题讨论】:

  • 也许不是您要寻找的答案,但我强烈建议您研究一个 javascript 库来抽象出 XMLHttpRequest - 例如 jQuery、YUI og 原型。
  • 我在我的 AIR 项目中使用 jQuery,但似乎常用的 jQuery 方法(get、post、ajax)在 AIR 下无法按预期工作。也许不是这样,如果是这样,请告诉我!谢谢

标签: javascript ajax adobe air


【解决方案1】:

您不应该尝试捕获 onreadystatechange 函数的返回值。 XHR 是异步的,这意味着只有在请求完成时才会触发此代码。所以你必须准备对你的响应这个函数中做一些事情。最简单的做法是传入一个回调函数。

    function doRequest(url, callback_func){
        var req = new XMLHttpRequest();

        req.onreadystatechange = function(){
            if (req.readyState == 4) {
                var str = req.responseText;
                runtime.trace("deRequest result: " + str);

                callback_func(str);
            }
        };
        req.open('GET', url, true);
        req.send(null);
    }

    function callback_func(data) {
        // do something with your response data
    }

【讨论】:

    【解决方案2】:

    您将它返回给onreadystatechange 的调用者,它可能不感兴趣。你也不能在doRequest 的末尾返回它,因为它会在调用req.send(null) 后立即返回,并且该值尚不可用(仍需从服务器获取)。一段时间后,您的 onreadystatechange 处理程序被调用并且您拥有该值。在这一点上,没有地方可以将其返回。

    您需要构造您的代码,而不是return str,您可以对返回值做任何您想做的事情 - 例如。将其存储在某处,使用alert 显示它,然后将其传递给另一个函数。

    【讨论】:

      猜你喜欢
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多