Appcelerator: проблема переменной области - PullRequest
0 голосов
/ 17 апреля 2011

Я использую следующий код в Titanium Appcelerator для соединения с удаленным хостом:

var connect_remote = function(url)
{
    /*
     * make sure that the Device is connected before initiate process as we don't want to force
     * the user to open remote stream just for sake of new entries
     */
     //alert("In Func" + is_connected());
     var d_data = null;
     if(is_connected())
     {

         var c = Titanium.Network.createHTTPClient();
         var data = null;
         c.setTimeout(10000);
         c.onload = function()
            {
                if (c.status == 200 )
                {
                    data = this.responseData;
                    Titanium.App.Properties.setString('returnData',data);
                }
            };

        c.error = function(e)
        {
            alert("Error = "+e.error);
        }
        c.open('GET',url);
        c.send();
     }
}

Я хочу вернуть значение переменной data , которая должна сохранять значениеответ, так что я мог бы использовать, но он всегда возвращает нулевой или неопределенный.Как мне вернуть значение data из него?

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Не совсем понятно, что вы имеете в виду, но я думаю , что вы хотите, чтобы ваша функция connect_remote () возвращала вам какое-то значение.Вы не можете сделать это в асинхронной среде, подобной вашей.Вместо этого вы можете передать функцию в connect_remote (), которой можно передать значение «data» при запуске обработчика onload.

var connect_remote = function(url, handler)
{
    /*
     * make sure that the Device is connected before initiate process as we don't want to force
     * the user to open remote stream just for sake of new entries
     */
     //alert("In Func" + is_connected());
     var d_data = null;
     if(is_connected())
     {

         var c = Titanium.Network.createHTTPClient();
         var data = null;
         c.setTimeout(10000);
         c.onload = function()
            {
                if (c.status == 200 )
                {
                    data = this.responseData;
                    Titanium.App.Properties.setString('returnData',data);
                    handler(data);
                }
            };

        c.error = function(e)
        {
            alert("Error = "+e.error);
        }
            c.open('GET',url);
        c.send();
     }
}
0 голосов
/ 17 апреля 2011

Попробуйте «data = c.responseData» вместо «data = this.responseData».Просто дикая догадка, основанная на этом ...

...