Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблемы с массивом (https://javascript.ru/forum/events/52726-problemy-s-massivom.html)

Джангар 03.01.2015 19:07

Проблемы с массивом
 
var arr_days = [], arr_years = [];
var today = new Date();
var cur_day = today.getDate();
var cur_month = today.getMonth();
var cur_year = today.getFullYear();
var day_id;
day_id = 0;

cur_month = cur_month + 1;
today1 = cur_day+'.'+cur_month+'.'+cur_year;

jQuery(function(){
        jQuery.ajax({
            type: "GET", // метод передачи данных, можно пропустить - по умолчанию и так get
            url: "http://joomla15.loc/modules/mod_buddcalendar/days.xml", // путь к файлу, который будем читать
            dataType: "xml", // тип данных, с которыми работаем
            success: function(xml) { // переменная названа xml. ее можно назвать как либо по другому
            
            jQuery(xml).find('day').each(
                function(){
                    var obj_day = {};
                    var id = jQuery(this).attr('id');
                        obj_day["grig"] = jQuery(this).find('grig').text();
                        obj_day["moon"] = jQuery(this).find('moon').text();
                        obj_day["holiday"] = jQuery(this).find('holiday').text();
                        arr_days.push(obj_day);                                    
                        //alert(obj_day);
                });
            }            
        });
});
$(document).ready(function () {
       alert(arr_days.length); //показывает 0!!!!!!!!!!!!!!!!!!!
});

	function getNextDay(){				
        alert(arr_days.length); //показывает 365!!!!!!!!!!!!!!!!!!!
		day_id = day_id + 1;
		if(day_id >= arr_days.length){
			day_id = arr_days.length - 1;
		}		
		showDay(day_id);
	}
	function getPrevDay(){		
		day_id = day_id - 1;
		if(day_id <= 0){
			day_id = 0;
		}
		showDay(day_id);
	}
	function showDay(day_id){
		//...  код формирования myhtml...
		$("#xml-data").html(myhtml);        
	}


Пишу маленький модуль для joomla 1.5, который показывает буддийский календарь...
При загрузке страницы д.б. загружен текущий день (или 0й элемент массива arr_days).

Проблема: элементы массива доступны только в теле функций!...

Uncaught TypeError: Cannot read property 'grig' of undefined

Rise 03.01.2015 19:33

Джангар, Cannot read property 'grig' of undefined
jQuery(this).find('grig').text();

Джангар 03.01.2015 20:14

Цитата:

Сообщение от Rise (Сообщение 349362)
Джангар, Cannot read property 'grig' of undefined
jQuery(this).find('grig').text();

'grig' - это НЕ элемент DOM!!!
'grig' - это свойство объекта obj_day!

не в 'grig' (и прочих) свойстве дело.

Внимательно читайте код, пожалуйста...

Rise 03.01.2015 20:21

Джангар, а откуда ошибка такая? Я только в одном месте вижу где оно используется.

Джангар 03.01.2015 21:21

Цитата:

Сообщение от Rise (Сообщение 349368)
Джангар, а откуда ошибка такая? Я только в одном месте вижу где оно используется.

Аллах его знает откуда.... знал бы - не обращался

1. Парсинг XML-файлов проходит успешно
2. Массивы наполняются нормально
3. Массивы доступны в ФУНКЦИЯХ
4. НО недоступны в теле программы!

Моя задача: выполнить ShowDay(day_id) при загрузке страницы, но!!!!
При вызове функции из тела программы - массив arr_days пуст, длина 0!
При обращении в ф-ям getNextDay() и getPrevDay() через контролы (кнопочки), ShowDay(day_id) успешно выполняется (массив arr_days НЕ пуст!)...

Rise 03.01.2015 21:38

Джангар, при загрузке страницы данные еще в пути, поэтому массив пуст, надо вызывать ShowDay в success (после 28 строки), она вызывается когда данные получены.

Джангар 03.01.2015 21:50

Замечательно! Работает! Осталось дизайн нарисовать....

Все таки как много зависит от понимания "философии" языка...


Часовой пояс GMT +3, время: 23:12.