jQuery загружает внешний JavaScript с $ (document) .ready терпит неудачу - PullRequest
1 голос
/ 29 февраля 2012

Я хотел бы загрузить внешний HTML. Кроме того, внешний HTML-код содержит некоторый код JavaScript. Поскольку функция загрузки не загружает этот скрипт, я должен использовать getScript:

<div id="external-content"></div>

<script type="text/javascript">
  $("#external-content").load("external.html #myid", function() {
    // do something
  });
  $.getScript("external.js");
</script>

Это работает как шарм, если только external.js не имеет команду $ (document) .ready, которая пытается получить доступ к элементам из external.html. Мне кажется, что событие произошло слишком рано. Я также попытался поставить команду $ .getScript ("external.js"); в обратный вызов .load, но не удалось. Обратите внимание, что пение external.html отдельно и включение external.js напрямую работает, как и ожидалось.

1 Ответ

0 голосов
/ 29 февраля 2012

К сожалению, выбор времени имеет смысл (т. Е. Это правильное поведение). Сценарий внутри тега запускает извлечение external.html и не ждет его возврата, он продолжает переходить к извлечению external.js. Тем временем «базовый» документ все еще загружается и может (на самом деле, вероятно) завершится до получения externa.html.

Итак, вы можете столкнуться с ситуацией, когда:

Документ действительно готов (загружаемый external.html не является условием для сценариев DOM), external.js загружен и доступен, но external.html еще не загружен полностью. Функция готовности документа сработает (потому что документ готов!) До того, как появятся элементы external.html.

Если вы хотите продолжить этот подход, возможно, есть способы перенастроить его так, чтобы вы использовали on() внутри external.js, чтобы делегировать слушателю базовый документ (#myid) для событий на элементах внутри external. HTML.

...