Делать что-то после того, как jquery обновляет DOM (AJAX-запрос) - PullRequest
1 голос
/ 07 февраля 2011

У меня есть несколько обработчиков livequery, которые обновляют содержимое страницы.Я хотел бы отображать контент только после того, как они были запущены (чтобы пользователи некоторое время не видели неизменную версию).Контент загружается с использованием обычного AJAX.

До сих пор я пробовал следующее:

  1. получить ajax через html
  2. сделать его невидимым (видимость: скрытая)
  3. window.setTimeout (showContent, 100) - устанавливает видимость для видимого

Я предполагал, что это будет работать, так как для одной вкладки существует один поток JS - поэтому таймер должен срабатывать после всехдругие операции завершены.И это работает в FF & IE.Однако в Chrome иногда я некоторое время вижу неизменный контент - как будто JS был переполнен или прерван по таймауту?

Или, может быть, есть лучший способ добиться того, что я пытаюсь сделать?(Без таймаута).

Ответы [ 2 ]

1 голос
/ 07 февраля 2011
  • Вы можете использовать успех обратный вызов
  • или вы можете вернуть сам javascript и добавить его в dom. (в котором вы будете указывать механизмы отображения :))
0 голосов
/ 07 февраля 2011

Оказывается, что livequery использует тайм-аут для внутреннего выполнения реальных запросов, так что это был вопрос порядка метода timeout.

Так что я решил это ожидание, пока очередь livequery не очистится (с некоторыми границами, если пользователь без ума от своей мыши и постоянно генерирует события):

function run_after_livequery(method) {
    var tries = 0;
    function run_if_livequery_done() {
        if (!$.livequery.queue.length || tries >= 20) {
            method();
        } else {
            window.setTimeout(run_if_livequery_done, 50);
            tries++;
        }
    }

    window.setTimeout(run_if_livequery_done, 50);
}
...