Использовать результат AJAX только после загрузки страницы

#jquery #document-ready

#jquery #документ готов

Вопрос:

Я запускаю $.get() вызов, как только выполняется JS, это происходит до $(document).ready() запуска. Как я могу использовать результат $.get сразу после $(document).ready() запуска? Я не хочу отправлять $.get() сообщение после $(document).ready() запуска.


Решение: Как упоминал Джонатан Джулиан, я наткнулся на это решение:

 $.get('my_script.php', function(data) {
  $(document).ready(function() {
    // I can use data here as soon as document is available! 
    // No flickering of the updated div! :)
  });
});
  

Ответ №1:

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

Комментарии:

1. Мой $.get вызывается до готовности документа! Я не хочу откладывать document.ready, но я хочу подключить к нему уже подготовленный результат из $.get .

2. да, но поскольку он асинхронный, у вас нет гарантии, когда он завершится. Я не уверен, что вы получаете, get() но что бы это ни было, оно должно быть отправлено при первой загрузке страницы, я понятия не имею, зачем вам нужно выполнить 2 http-запроса, прежде чем страница будет готова..

3. Возможно, данные недоступны во время рендеринга страницы. В подходе @powtac нет ничего плохого.

4. допустим, ради аргумента, что эти данные каким-то образом были доступны только после того, как был сделан первый http-запрос, я все еще не понимаю, зачем вам нужно откладывать подготовку документа, он будет готов, когда он будет готов, конечно, какими бы ни были данные, вы можете вставить их в DOM в любом случае, если хотитекак

5. $.get запускается намного раньше, чем document.ready , и обычно результат возвращается также до document.ready .

Ответ №2:

В вашем success обработчике сделайте то, что вам нужно сделать в $(document).ready() функции. Он либо запустится сразу, либо подождет, пока документ не будет готов.

Ответ №3:

Определите переменную в глобальной области видимости и используйте для хранения значения из get(). Вы можете использовать его позже в любом месте в любое время.

Комментарии:

1. Трудно определить «позже» в такой вещи, управляемой событиями, как браузер. Доступ к этой переменной может быть получен до завершения запроса ajax.