Цикл 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, время: 04:48. |