我有一个在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:我使用Titanium SDK 1.6在OSX下工作。对于我在Android上的测试,我使用模拟器(API 2.2)和设备(2.1update1)。
谢谢,
问候。
答案 0 :(得分: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函数。