Доступ к переменной снаружи при загрузке - PullRequest
2 голосов
/ 13 сентября 2011

Привет. Я занимаюсь разработкой приложений для Android с использованием Titanium Studio. Я разработал небольшое приложение. Моя проблема в том, что я не могу получить доступ к переменной, которая определена внутри нагрузки xhr.on. Я использовал следующий код:

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

Я хочу получить доступ к to_count и to_array вне функции onload и передать его в другое дочернее окно. Для этого я использовал следующий код:

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

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

XHR-клиент по умолчанию является асинхронным, что означает, что код продолжит выполняться, пока XHR работает.Если у вас есть код, который зависит от завершения вашего XHR, вам нужно будет либо вызвать этот код из функции onload, либо принудительно заставить XHR быть синхронным, добавив «false» в качестве третьего параметра в xhr.send() (IПервый вариант оказался более надежным и в большей степени соответствует тому, что Титаниум ожидает / считает наилучшей практикой, просто к вашему сведению).

0 голосов
/ 02 ноября 2011

Лучший способ сделать это - инициализировать 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;
};

Я не знаком с Титаниумом, поэтому не знаю подробностей, но это мое лучшее предположение.

0 голосов
/ 13 сентября 2011

Я не очень знаком с Titanium, но по объему декларации, я думаю, это то, что вам нужно сделать, чтобы использовать их вне функции.

var to_array;
var to_count;


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