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 上运行良好的解决方法。如你所知,同步模式不能强制(即使文档中提到可以做到)所以我使用这个方法来xhr同步调用第二个。

但为什么list2Lengthnull安卓呢?

PS:我在 OSX 下使用 Titanium SDK 1.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 回答