我在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控制台打印出这个:
Titanium似乎在请求之后首先调用代码,然后是请求。所以我不能用responseText改变var的值。我该怎么做?为什么会发生?
很抱歉,如果有人在此之前在此发布,但我无法在关键字中考虑在StackOverflow中搜索它
提前致谢=)
答案 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);
现在它运行良好