Почему эта команда jQuery load()-повторяется?

#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*/);