Titanium createHttpClient在其他vars声明之后运行

时间:2012-06-27 01:40:06

标签: javascript mobile titanium-mobile appcelerator-mobile

我在Titanium中有这个代码,它在服务器上调用一个PHP文件,打印出与id匹配的用户名:

var myString;
var request = Titanium.Network.createHTTPClient();
var url = "http://localhost/myPhp.php?id=1";
request.open("GET", url, false);
request.onload = function(){
    var newString = this.responseText;
    Ti.API.info(newString);
    myString = newString;
}

request.send();
Ti.API.info("result " + myString);

Titanium控制台打印出这个:

  • 结果未定义
  • nameOfUser

Titanium似乎在请求之后首先调用代码,然后是请求。所以我不能用responseText改变var的值。我该怎么做?为什么会发生?

很抱歉,如果有人在此之前在此发布,但我无法在关键字中考虑在StackOverflow中搜索它

提前致谢=)

3 个答案:

答案 0 :(得分:0)

请求是异步的,当您调用request.send()时,它不会阻止执行。请求完成后,将调用onload事件处理程序。

答案 1 :(得分:0)

将您的代码更改为:

var myString;
var request = Titanium.Network.createHTTPClient();
var url = "http://localhost/myPhp.php?id=1";
request.open("GET", url, false);
request.onload = function(){
    var newString = this.responseText;
    Ti.API.info(newString);
    myString = newString;
    Ti.API.info("result " + myString);
}

request.send();

只需将Ti.API.info(“result”+ myString)日志放入onload函数即可。一旦获取请求,就会动态调用onload函数。

答案 2 :(得分:0)

Titanium createHttpClient请求必须具有异步和同步模式。

你的行exicutes frist打印“undefinde” Ti.API.info(“结果”+ myString);

然后响应,它打印nameOfUser的名称。

如果要使代码以内联方式运行,则必须使createHttpClient调用同步。您必须为其设置createHttpClient

的参数

将第三个参数设为true。

request.open(“GET”,url,true);

现在它运行良好