Цикл for не успевает?
Добрый день. Есть код который получает объект из sql базы и заносит его в таблицу:
function get_data() { $.ajax({ type: 'ajax', url: 'get_data', dataType: 'json', success: function (data) { for (i = 0; i < data.length; i++){ html += '<tr>' + '<td class="success">' + data[i].RO + '</td>' + // перечень параметров '</tr>'; } $("#table").html(html); } }); } setInterval(function(){ get_data (); }, 2000); Так вот, далее допустим я отслеживаю состояние параметров объектов и что то хочу с ним сделать в таблице, пишу функцию function see_table (atribut, data){ if(data[atribut] == 'меня не устраивает'){ //что то там делаю } } И такой думаю, параметров много, засуну ка я их в мой цикл: function get_data() { $.ajax({ type: 'ajax', url: 'get_data', dataType: 'json', success: function (data) { for (i = 0; i < data.length; i++){ html += '<tr>' + '<td class="success">' + data[i].RO + '</td>' + // перечень параметров '</tr>'; see_table (i, data); } $("#table").html(html); } }); Но когда я так делаю функция не выполняет то что должна, данные передаются нормально в нее. А вот если сделать так, то функция see_table прекрасно отрабатывает: function get_data() { $.ajax({ type: 'ajax', url: 'get_data', dataType: 'json', success: function (data) { for (i = 0; i < data.length; i++){ html += '<tr>' + '<td class="success">' + data[i].RO + '</td>' + // перечень параметров '</tr>'; } $("#table").html(html); see_table (0, data); see_table (1, data); see_table (2, data); see_table (3, data); } }); То есть передаю вручную вне цикла, но объектов внутри data будет много и это не вариант. Получается во время выполнения цикла функция просто не успевает отработать данные? Или я криворукий и так не делается? |
А "//что то там делаю" - это что именно? Данные эти на страницу попадают только после завершения цикла:
$("#table").html(html); |
Artur_Hopf,
Мучает меня любопытство: Зачем вы передаете в функцию весь массив? see_table (i, data); Нельзя так? see_table (data[i]); |
Dilettante_Pro,
Мм, точно, сейчас попробую.. Не помогло =) В этой функции я сравниваю даты, текущую и полученную из таблицы, если они отличаются больше чем на час меняю класс объекта в таблице: function see_table (atr, data){ var realTime = moment().format(); var time = moment(dateTimeWT[atr].DateTime).add(1, 'hour').format(); var isSame = moment(time).isSameOrBefore(realTime); // сравнение даты if(isSame){ $('#fa_1'+atr).css({"color": "black", "opacity": "1"}); }; if(CWT[atr].odds_p < 0 || CWT[atr].status == 3 && data[atr].TechState){ $('#odds_p'+atr).removeClass('success'); $('#odds_p'+atr).addClass('danger'); } else{ $('#odds_p'+atr).removeClass('danger'); $('#odds_p'+atr).addClass('success'); }; if(data[atr].TechState){ $('#odds_p'+atr).removeClass('danger'); }; } Получается цикл за 2 секунды не успевает это обработать? |
Artur_Hopf,
сразу предупреждаю - лучше не будет. Спросил из любопытства |
Dilettante_Pro,
Все до меня дошло, таблица не была создана до этой функции,вот и вся причина =) |
Часовой пояс GMT +3, время: 22:18. |