Мой сайт использовал 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, не полагаясь на изображения, flash или что-то еще, что еще не должно быть загружено. Чтобы не застрять, у меня есть этот отвратительный прием, чтобы все заработало. Вместо загруженного AJAX сценария просто используйте:
$(document).ready( function() {...} ); // unreliable
Я откладываю сценарий на 200 мс перед запуском:
$(document).ready( window.setTimeout( function() {...}, 200 )); // HATE THIS
Кто-нибудь знает, как я могу заставить эту работу надежно работать без жесткой задержки в коде? Я предполагаю, что это состояние гонки между