Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2014, 17:43
Новичок на форуме
Отправить личное сообщение для Джангар Посмотреть профиль Найти все сообщения от Джангар
 
Регистрация: 17.12.2014
Сообщений: 7

Проблема с наполнением массива объектов - последний элемент заменяет собой все...
Пишу маленький модуль для вывода буддийского календаря на сайте. Данные хранятся в xml-файле и успешно считываются, далее формируется объект по данным парсинга и сформированный объект должен быть добавлен в массив объектов.

var obj_day = new Object();
var arr_days = [];
var i;
jQuery(document).ready(function(){
        jQuery.ajax({
            type: "GET", // метод передачи данных, можно пропустить - по умолчанию и так get
            url: "http://joomla15.loc/modules/mod_buddcalendar/calendar.xml", // путь к файлу, который будем читать
            dataType: "xml", // тип данных, с которыми работаем
            success: function(xml) { // переменная названа xml. ее можно назвать как либо по другому
            
            jQuery(xml).find('day').each(
                function(){
                    var id = jQuery(this).attr('id');
                    	obj_day["grig"] = jQuery(this).find('grig').text();
                        obj_day["moon"] = jQuery(this).find('moon').text();
                        obj_day["travel"] = jQuery(this).find('travel').text();
                        obj_day["cutting"] = jQuery(this).find('cutting').text();
                        obj_day["special"] = jQuery(this).find('special').text();
                        obj_day["mazk"] = jQuery(this).find('mazk').text();
                        obj_day["holiday"] = jQuery(this).find('holiday').text();
                        arr_days.push(obj_day);                    
                });            
       
            i = 0;
            jQuery('<div class="items"></div>').html('Дата '+arr_days[i].grig+'<br>Лунный день '+arr_days[i].moon+'<br>Путешествие '+arr_days[i].travel+'<br>Стрижка волос '+arr_days[i].cutting+'<br>Особенность '+arr_days[i].special+'<br>Мацк '+arr_days[i].mazk+'<br>Праздник '+arr_days[i].holiday).appendTo('#xml-data');
            i = 1;
            jQuery('<div class="items"></div>').html('Дата '+arr_days[i].grig+'<br>Лунный день '+arr_days[i].moon+'<br>Путешествие '+arr_days[i].travel+'<br>Стрижка волос '+arr_days[i].cutting+'<br>Особенность '+arr_days[i].special+'<br>Мацк '+arr_days[i].mazk+'<br>Праздник '+arr_days[i].holiday).appendTo('#xml-data');
            }
        });
});


В итоге у меня последний сформированный объект заменяет собой все остальные элементы массива... что-то с логикой у меня "недопёр"...

Поможите кто можите!...
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2014, 17:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Джангар,
var arr_days = [];
jQuery(function(){
        jQuery.ajax({
            type: "GET", // метод передачи данных, можно пропустить - по умолчанию и так get
            url: "http://joomla15.loc/modules/mod_buddcalendar/calendar.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["travel"] = jQuery(this).find('travel').text();
                        obj_day["cutting"] = jQuery(this).find('cutting').text();
                        obj_day["special"] = jQuery(this).find('special').text();
                        obj_day["mazk"] = jQuery(this).find('mazk').text();
                        obj_day["holiday"] = jQuery(this).find('holiday').text();
                        arr_days.push(obj_day);
                        jQuery('<div class="items"></div>').html('Дата '+obj_day.grig+'<br>Лунный день '+obj_day.moon+'<br>Путешествие '+obj_day.travel+'<br>Стрижка волос '+obj_day.cutting+'<br>Особенность '+obj_day.special+'<br>Мацк '+obj_day.mazk+'<br>Праздник '+obj_day.holiday).appendTo('#xml-data');
                });
            }
        });
});
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2014, 19:00
Новичок на форуме
Отправить личное сообщение для Джангар Посмотреть профиль Найти все сообщения от Джангар
 
Регистрация: 17.12.2014
Сообщений: 7

Спасибо! Всё работает, профессор!
Лишний раз убеждаешься, что программирование - это игра слов.
На сколько я понял все дело в видимости объекта obj_day?...
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2014, 19:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Сообщение от Джангар
На сколько я понял все дело в видимости объекта obj_day?...
нет ... я просто убрал лишнее ... впрочем не всё ...
зачем нужна эта строка для меня загадка ...
var id = jQuery(this).attr('id');


если нужна

то так быстрее
var id = this.id;

Сообщение от Джангар
В итоге у меня последний сформированный объект заменяет собой все остальные элементы массива...
этого в коде я не увидел -- массив заполняется нормально -- а вот вывод на страницу есть только двух первых элементов массива.
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2014, 22:44
Новичок на форуме
Отправить личное сообщение для Джангар Посмотреть профиль Найти все сообщения от Джангар
 
Регистрация: 17.12.2014
Сообщений: 7

Сообщение от рони Посмотреть сообщение
этого в коде я не увидел -- массив заполняется нормально -- а вот вывод на страницу есть только двух первых элементов массива.
массив в первоначальном виде кода наполняется криво. Это демонстрировало вывод первых двух его элементов (второй элемент был конечный). Т.е. все элементы массива (два) были идентичны, хотя в источнике (xml) дифференциальны... причем на этапе формирования очередного job_day все было нормально... Тогда как при его добавлении в массив (push) я получал экземпляр последнего считанного job_day во всех элементах массива.

Только после переноса объявления job_day в тело функции. массив стал наполняться нормально.

Последний раз редактировалось Джангар, 18.12.2014 в 22:47.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2014, 22:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Джангар,
ok
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Название ячейки таблицы Questioner Общие вопросы Javascript 6 16.02.2011 09:58
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37