Javascript Appcelerator:变量范围问题

Javascript Appcelerator:变量范围问题,javascript,appcelerator-mobile,Javascript,Appcelerator Mobile,我正在Tianium 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

我正在Tianium 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变量的值,该变量应该保留响应的值,以便我可以使用,但它总是返回null或未定义。如何从中返回值data

尝试“data=c.responseData”而不是“data=this.responseData”。这只是一个基于…

的猜测,还不完全清楚您的意思,但我认为您希望“connect_remote()”函数向您返回一些值。在像您这样的异步环境中,您无法做到这一点。相反,您可以向“connect_remote()”传递一个函数,当“onload”处理程序运行时,可以向该函数传递“data”值

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();
     }
}

您应该澄清“返回数据值”的含义。考虑到在JavaScript中
return
语句很重要,这是一个令人困惑的语句。如果您只是想使用该值,并且您对“setString()”的调用是唯一的问题,那么您应该澄清一下。我编辑了它。感谢您指出,现在还不清楚我需要哪个函数来返回响应数据的值;要么是handler,要么是connect\u remote,要么是我将值存储在某个全局变量中?好吧,让我这样说:如果您想在某个地方使用
return
语句,比如
return data
在“onload”函数中,您不能这样做,“onload”函数是异步调用的,因此它没有返回值的位置,换句话说,没有任何东西可以“捕获”返回值。但您可以像我的示例中那样传递函数。我可以理解,由于异步性质,无法预测值何时到达,因此即使执行“connect\u remote”函数也无法获取值。handler值确实获取了该值,但整个解决方案并不是那么通用,因为我希望使“url”成为动态的,并获取所需的数据,对于每个HTTP请求,我必须重复整个逻辑