これは私のiPhoneアプリのモジュールです。目的は、別のモジュールのTableViewのdataプロパティに追加できるJSON responeTextから配列を返すことです。onload関数の結果を変数に渡す
JavaScriptに対して比較的新しいので、自分の配列を変数selfに渡すための正しい構文を見つけることができません。
function Events() {
var self = [];
var xhr = Ti.Network.createHTTPClient();
xhr.open('GET', 'http://localhost/ngparser/events.php');
xhr.onload = function() {
var events = JSON.parse(this.responseText),
rows = [];
Ti.API.info('JSON responseText: ');
Ti.API.info(events);
for (var i in events) {
var id = events[i].id,
title = events[i].title;
var amp = title.search('&');
if (amp != -1) {
title = title.replace('&', '&');
}
var row = Ti.UI.createTableViewRow({
title: title,
hasChild: true
});
rows.push(row);
}
// I want this...
return rows;
};
xhr.send();
self = //... to end up here!
self = xhr.send(); //Does not work
return self;
}
module.exports = Events;
EDIT:AJAXは非同期であるhttp://developer.appcelerator.com/question/133913/how-do-i-pass-result-from-xhronload-function-to-variable#comment-119031
私はコールバックで遊んでいますが、動作させることはできません。私のeventsCallbackは、info()からの出力がないので、実行されていないようです。ウィンドウモジュール:http://pastebin.com/1kdga075データモジュール:http://pastebin.com/bQVi55Pn –
オンロードコールバックが起動していない場合、エラーが発生する可能性があります。 onerrorコールバックにinfo()を追加して、それがトリガしているかどうか確認してください。 – DannyM
xhr.onload in Events()は実際には関数のinfo()からの出力を取得していますので、EventsWindowのeventsCallback()を意味しています。申し訳ありません。私は "xhr.onerror = function(e){Ti.API.info(e.error);}"をEvents()に追加しました。コンソールにエラーはありません。 –