Это модуль в приложении для iPhone. Цель состоит в том, чтобы вернуть массив из JONON responeText, который затем можно добавить к свойству data TableView в другом модуле.Передать результат функции 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: Решение было найдено в конце концов, здесь http://developer.appcelerator.com/question/133913/how-do-i-pass-result-from-xhronload-function-to-variable#comment-119031
Я играл с обратными вызовами, но не могу заставить его работать. Мои событияCallback, похоже, не запускаются, так как theres нет вывода из info(). Модуль окна: http://pastebin.com/1kdga075 Модуль данных: http://pastebin.com/bQVi55Pn –
Если обратный вызов onload не запускается, тогда должна быть ошибка. Попробуйте добавить info() в обратный вызов onerror и посмотреть, запускается ли это. – DannyM
xhr.onload в Events() действительно срабатывает, так как я получаю вывод из функции info(), я имел в виду eventsCallback() в EventsWindow. Извини за это. Я добавил «xhr.onerror = function (e) {Ti.API.info (e.error);}» в Events(), и в консоли нет ошибки. –