這應該是一個非常簡單的概念,但我只是不明白。在Titanium應用程序中,我有幾個窗口使用的數據數組,我的xhr結果需要傳遞到應用程序名稱空間的頂層以添加到數組中。我可以成功解析onload函數內部的JSON響應,但是我想將我的數據代碼與我的UI代分開。傳遞結果xhr.onload
這是一個簡化的app.js版本,以便我可以理解這個概念。不,我不會在我的真實應用程序中污染全局名稱空間。
Titanium.UI.setBackgroundColor('#000');
var myArray = [];
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function() {
myArray = JSON.parse(this.responseText);
// var data = JSON.parse(this.responseText); // no help
// myArray.push(data); // no help
// return myArray; // no help
};
xhr.onerror = function() {
Titanium.UI.createAlertDialog({ message:"Something has gone terrible wrong."});
};
xhr.open('GET','http://myapp.com/data.json');
xhr.send();
var win = Ti.UI.createWindow();
var view = Titanium.UI.createView({
backgroundColor:'green'
});
var caption = myArray[2].caption;
var label = Ti.UI.createLabel({
color:'white',
text:caption,
textAlign:'center'
});
view.add(label);
win.add(view);
win.open();
感謝您的耐心等待!
編輯
這將產生從用戶的角度來看,正確的結果,但我想訪問的onload功能範圍之外的陣列。我不想讓UI代碼與API調用混合在一起。
xhr.onload = function() {
myArray = JSON.parse(this.responseText);
var caption = myArray[2].caption;
var label = Ti.UI.createLabel({
color:'white',
text:caption,
textAlign:'center'
});
view.add(label);
};
請參見新編輯代碼。 – 2011-05-28 19:26:25
您是否已經無法在其外部訪問'myArray',我不明白爲什麼只要您已經定義了它,就無法進行操作。 'var myArray = {}' – bh88 2011-05-28 20:13:19
如果(在我的onload函數之外)我嘗試'var caption = myArray [4] .caption',它是未定義的。如果我嘗試'var caption = myArray',它會產生'()',所以我相信這個數組是空的。 – 2011-05-28 20:30:37