Вложенный вызов xhr не работает с Android - PullRequest
0 голосов
/ 01 марта 2011

У меня есть код, который отлично работает на 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.

Но почему list2Length это null с Android?

PS: я работаю под OSX с Titanium SDK 1.6.Для своих тестов на Android я использую эмулятор (API 2.2) и устройство (2.1update1).

Спасибо,

С уважением.

1 Ответ

0 голосов
/ 04 марта 2011

Я бы сделал это так:

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();

для чего это «аргумент»?

вам нужно объявить функцию onload перед вызовом методов .open и .send.

...