Скрипты, запущенные в загруженных jquery.ajax () страницах, запускают document.ready слишком рано
Мой сайт использовалjquery.load()
сделать навигацию по большому фрагменту страницы. Я действительно ценю возможность включать только определенную часть загруженного контента, здесь div с id = "content":
$(frame_selector).load(url +" #content", function(response, status, xhr) {...});
Но теперь мне нужно иметь возможность запускать скрипты, которые являются частью динамически загружаемых страниц.Jquery.load()
удаляет эти сценарии, ноjquery.ajax()
не делает. Поэтому я продублировал функциональность частичного контентаjquery.load
в вызове ajax как таковой:
$.ajax({
url: url,
dataType: 'html',
success: function(data, textStatus, XMLHttpRequest) {
// Only include the response within the #content id element.
$(frame_selector).html( jQuery("<div>")
.append(data)
.find("#content")
);
}
});
Проблема в том, что скрипты, которые динамически загружаются из вызова ajax, работают ненадежно. Иногда они, кажется, не имеют никакого эффекта, возможно, потому что они бегут слишком рано. Сценарии просто выполняют DOM-манипуляции в jquery - не полагаясь на изображения, флэш-память или что-то, что еще не загружено. Чтобы не застрять, у меня есть этот отвратительный хак, чтобы все заработало. Вместо загруженного AJAX-скрипта просто используется:
$(document).ready( function() {...} ); // unreliable
Я задерживаю сценарий за 200мс до запуска:
$(document).ready( window.setTimeout( function() {...}, 200 )); // HATE THIS
Кто-нибудь знает, как я могу сделать это надежно, без жесткого кодирования задержки? Я предполагаю, что это состояние гонки между<script>
и моя логика для загрузки#content
в новый div, но я не уверен, что с этим делать.