0

IDと一致するユーザーの名前を出力するサーバー上のPHPファイルを呼び出す、Titaniumにこのコードがあります。

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 で検索するキーワードを考えられませんでした。

よろしくお願いします=)

4

3 に答える 3

0

Titanium createHttpClient リクエストは、非同期モードと同期モードにする必要があります。

あなたの行は、 "undefinde" Ti.API.info("result " + myString); を出力する frist を実行します。

その後、応答が返され、nameOfUser の名前が出力されます。

コードをインラインで実行したい場合は、createHttpClient 呼び出しを同期させる必要があります。createHttpClient のパラメーターを設定する必要がある

3 番目のパラメーターを true にします。

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

今はうまくいきます

于 2012-11-30T15:59:26.523 に答える
0

要求は非同期です。呼び出しrequest.send()ても実行はブロックされません。リクエストが完了すると、onloadイベント ハンドラが呼び出されます。

于 2012-06-27T02:06:17.997 に答える
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 に答える