0

我在 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 似乎在请求之后首先调用代码,然后再调用请求。所以我不能用 responseText 改变 var 的值。我该怎么做?为什么会这样?

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

提前感谢=)

4

3 回答 3

0

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

您的行执行第一个打印“未定义” Ti.API.info("result " + myString);

然后响应来了,它会打印出 nameOfUser 的名称。

如果你想让你的代码内联运行,那么你必须让你的 createHttpClient 调用同步。您必须为其设置 createHttpClient 的参数

使第三个参数为真。

request.open("GET", url, true);

现在它会运行良好

于 2012-11-30T15:59:26.523 回答
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 函数。

于 2012-07-17T03:15:49.837 回答
0

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

于 2012-06-27T02:06:17.997 回答