【问题标题】:Accessing variable outside on load function在加载函数外访问变量
【发布时间】:2011-09-13 11:23:12
【问题描述】:

您好,我正在使用钛工作室进行 Android 应用程序开发。我开发了小型应用程序。我的问题是我无法访问在 xhr.on 加载中定义的变量。我使用了以下代码:

xhr.onload = function()
{
var json = this.responseText;
var to_array = JSON.parse(json);
var to_count = to_array.length;
};

我想在 onload 函数之外访问 to_count 和 to_array 并将其传递给另一个子窗口。为此我使用了以下代码:

var feedWin = Titanium.UI.createWindow({
    url:'home/feed.js'
});//alert(to_count);
feedwin.to_array = to_array;
feedwin.to_count = to_count; 

【问题讨论】:

    标签: javascript android mobile titanium-mobile


    【解决方案1】:

    XHR 客户端默认是异步的,这意味着代码将在 XHR 运行时继续执行。如果您的代码依赖于您的 XHR 是否完成,那么您将需要从 onload 函数中调用该代码,或者通过将“false”作为第三个参数添加到 xhr.send() 来强制 XHR 同步(我'已经发现第一个选项是更可靠的选项,并且更符合 Titanium 的期望/感觉是最佳实践,仅供参考)。

    【讨论】:

      【解决方案2】:

      完成此操作的最佳方法是在onload 中初始化您的feedWin。因此,以下两个 sn-ps 之一应该可以工作:

      xhr.onload = function()
      {
          var json = this.responseText,
              feedWin = Titanium.UI.createWindow({
                  url:'home/feed.js'
              });//alert(to_count);
      
          feedWin.to_array = JSON.parse(json);
          feedWinto_count = to_array.length;
      };
      

      var feedWin = Titanium.UI.createWindow({
              url:'home/feed.js'
          });
      
      xhr.onload = function()
      {
          var json = this.responseText,
      
          feedWin.to_array = JSON.parse(json);
          feedWinto_count = to_array.length;
      };
      

      我不熟悉钛,所以我不知道细节,但这是我最好的猜测。

      【讨论】:

        【解决方案3】:

        我对 Titanium 不是很熟悉,但是对于声明的范围,我认为这是在函数之外使用它们所需要做的。

        var to_array;
        var to_count;
        
        
        xhr.onload = function()
        {
        var json = this.responseText;
        to_array = JSON.parse(json);
        to_count = to_array.length;
        };
        

        【讨论】:

        • 为此,您需要确保调用 feedwin.to_array = to_array; feedwin.to_count = to_count;在调用 onload 之后发生。 Javascript 不像 C 那样基于引用,因此如果您在加载之前调用了这些,它们将获得 null / undefined 值。
        猜你喜欢
        • 2012-10-19
        • 1970-01-01
        • 2019-09-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-25
        • 2014-01-29
        • 1970-01-01
        • 2016-06-11
        相关资源
        最近更新 更多