Я отправил запрос getJSON контроллеру в моем приложении, этот контроллер возвращает действительный JSON с двумя «приложениями». Я знаю это точно, как если бы я переместил оператор оповещения в каждую функцию jQuery, это даст мне ожидаемый результат.
Я пытаюсь сохранить эти данные в многомерном массиве для последующего использования с помощью управления меню extJS.
Код:
Ext.onReady(function() {
var applicationList = [];
jQuery.getJSON('index.php/applications', function(data) {
jQuery.each(data.applications, function (i, app) {
applicationList[i] = [];
applicationList[i]['text'] = app['title'];
applicationList[i]['id'] = app['slug'];
});
});
alert(applicationList[0]['text']);
var applicationMenu = Ext.menu.Menu({
items: applicationList
});
});
JSON-ответ:
{"applications":[{"slug":"test","title":"Test"},{"slug":"hardware","title":"Hardware"}]}
Ожидаемый результат:
Test
Фактический результат (от Firebug):
applicationList [0] не определен
Если я заменим alert()
выше, со следующим кодом, я получу одно окно с текстом «удалить»:
for (p in applicationList) {
alert(p);
}
Теперь я думаю, что запрос JSON не завершается вовремя для alert()
, поэтому я буду использовать именованную функцию обратного вызова, чтобы убедиться, что запрос завершен:
var data;
jQuery.getJSON('index.php/applications', get_applications(data));
function get_applications(data) {
jQuery.each(data.applications, function (i, app) {
applicationList[i] = [];
applicationList[i]['text'] = app['title'];
applicationList[i]['id'] = app['slug'];
});
};
Но теперь Firebug говорит мне, что data is undefined
...
Я чувствую, что я почти там, но я был почти там в течение последнего часа, и мне кажется, что я просто загрязняю источник сейчас, пытаясь заставить его работать.