0

私はiPhoneでうまく機能するコードを持っていますが、Androidで実行する場合、一部を無視します。問題は、ネストされたcreateHTTPClient呼び出しがあることです。

var xhr1 = Titanium.Network.createHTTPClient();
xhr1.open('GET',url1);
xhr1.send();
xhr1.onload = function(e) {
  var list1 = JSON.parse(this.responseText); 
  var list1Length = list1.length;
  Titanium.API.info('list1 length : ' + list1Length);
  var fctForList2 = function(argument){
    var xhr2 = Titanium.Network.createHTTPClient();
    xhr2.open('GET',url1);
    xhr2.send();
    xhr2.onload = function(e) {
      // display list where a value corresponds to the argument
      var list2 = JSON.parse(this.responseText);
      var list2Length = list2.length;
      Titanium.API.info('list2 length : ' + list2Length);
    };
  };

  var argument = list1[0].someValue;
  fctForList2(argument);
};

したがって、上記のコードで、iPhoneでうまく機能する回避策を見つけました。ご存知のように、同期モードを強制することはできません(ドキュメントに強制できると記載されている場合でも)。そのため、このメソッドを使用して2番目のモードを同期的に呼び出しましたxhr

しかし、なぜAndroidを使用するのでしょうかlist2Lengthnull

PS:私はOSXでTitaniumSDK1.6を使用しています。Androidでのテストでは、エミュレーター(API 2.2)とデバイス(2.1update1)を使用します。

ありがとう、

よろしく。

4

1 に答える 1

0

私はそのようにします:

var xhr1 = Titanium.Network.createHTTPClient();
var xhr2 = Titanium.Network.createHTTPClient();

xhr2.onload = function(e) {
      // display list where a value corresponds to the argument
      var list2 = JSON.parse(this.responseText);
      var list2Length = list2.length;
      Titanium.API.info('list2 length : ' + list2Length);
};

xhr1.onload = function(e) {
     var list1 = JSON.parse(this.responseText); 
     var list1Length = list1.length;
     Titanium.API.info('list1 length : ' + list1Length);

     //second request
     xhr2.open('GET',url1);
     xhr2.send();
};

xhr1.open('GET',url1);
xhr1.send();

「議論」とは何ですか?

.openメソッドと.sendメソッドを呼び出す前に、onload関数を宣言する必要があります。

于 2011-03-04T09:29:00.147 に答える