Javascript Appcelerator:变量范围问题
我正在Tianium 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
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请求,我必须重复整个逻辑