#javascript #jquery
#javascript #jquery — запрос #jquery
Вопрос:
Я просмотрел множество сообщений stackoverflow и других веб-сайтов, чтобы найти решение этой проблемы, но ни одно из решений, которые я смог найти, не соответствовало моей проблеме или просто не сработало.
Я использую javascript и jQuery (и немного Java для фоновой работы) для создания страницы на веб-сайте. Страница содержит таблицу с данными (данные обрабатываются Java), и я хочу, чтобы эта таблица обновлялась каждые 10 секунд. Это работает.
Но теперь я также хочу выделить все ячейки, в которых изменились значения. Для этого, как вы видите в моем фрагменте кода, я просто делаю фон этих ячеек черным. Это тоже работает.
Моя проблема в том, что цвет меняется только на долю секунды, прежде чем вернуться к стандартному белому. Используя консоль и немного поиграв, я смог выяснить, что таблица фактически перезагружается дважды, что для меня должно означать, что команда загрузки выполняется дважды.
window.setInterval(function () {
if (frozen == false) {
$('table').load(document.URL ' table');
var elem = document.getElementById("freezebtn"); //This is a button generated by Java Code
elem.style.background = getRandomColor();
var tab = document.getElementsByTagName('table').item(1);
var l = tab.rows.length;
for (var i = 0; i<l; i ) {
var tr = tab.rows[i];
var cll = tr.cells[1];
var check = tr.cells[0];
if(check.innerText === "getAsk") {
var valAsk = cll.innerText;
var ask = Number(valAsk);
if (ask != loadPreviousAsk()) {
console.log("TELEFONMAST!");
cll.style.backgroundColor = "#000000";
}
}
//Do this for every other Updateable Cell
...
}
cachePreviousValues(someValues,thatINeed,To,BeCached);
}
Мой вопрос в том, что является / может быть причиной повторения команды загрузки (или почему ячейки вообще не остаются черными)?
Есть ли лучший способ достичь того, что я пытаюсь сделать?
Можно ли оптимизировать мой пример кода каким-либо другим способом?
Комментарии:
1. Это потому, что
$.fn.load()
является асинхронным, установите логику внутри полного обратного вызова:$('table').load(document.URL ' table', function(){/* your logic regarding loaded data here*/);
2. Я вроде как новичок в js… что такое «полный обратный вызов»?
3. Я отредактировал предыдущий комментарий, но не забудьте проверить ДОКУМЕНТ
4. Большое вам спасибо, я действительно сделал это прямо перед тем, как сдаться, но не перезагружал, чтобы посмотреть, сработало ли это ^^ Можете ли вы опубликовать это как ответ, чтобы я мог принять его завтра?
Ответ №1:
$.fn.load() выполняется асинхронно (по умолчанию). Для обработки любой логики, касающейся загруженных данных, вы можете использовать полный обратный вызов:
$('table').load(document.URL ' table', function(){/* your logic regarding loaded data here*/);