您好我正在使用钛工作室开发Android应用程序开发。我开发了一个小应用程序。我的问题是我无法访问xhr.on load中定义的变量。我使用下面的代码:
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;
答案 0 :(得分:1)
默认情况下,XHR客户端是异步的,这意味着代码将在XHR运行时继续执行。如果您的代码依赖于您的XHR,那么您需要从onload函数中调用该代码,或者通过将“false”作为第三个参数添加到xhr.send()
来强制XHR同步(我发现第一个选择是更可靠的选择,更符合Titanium的期望/感觉是最佳实践,仅限FYI)。
答案 1 :(得分:0)
实现此目的的最佳方法是初始化feedWin
中的onload
。因此,以下两个片段之一应该有效:
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;
};
我不熟悉Titanium,所以我不知道具体细节,但这是我最好的猜测。
答案 2 :(得分:-1)
我对Titanium不是很熟悉,但是对于声明范围,我认为这是你在函数之外使用它们所需要做的。
var to_array;
var to_count;
xhr.onload = function()
{
var json = this.responseText;
to_array = JSON.parse(json);
to_count = to_array.length;
};