Кажется, я столкнулся с состоянием гонки при запуске скриптов, введенных в мою веб-страницу через ajax. Например, у меня есть файл, который выглядит так:
<div id='test_id'>I'm a div</div>
<script>$(function(){alert('Do something to #test_id')});</script>
Я загружаю этот файл, используя метод post JQuery, и присоединяю его к диалоговому окну JQueryUI. Вот так:
var $dialog = $("<div id='div_dialog'></div>")
.dialog({
autoOpen: false,
title: 'NA',
modal: true,
width: '50%',
buttons: {some button object},
});
$dialog.dialog('open');
$.post(
[url to get page],
{},
function(data) {
$('#div_dialog').html('<div id="messages"></div>' + data);
});
Проблема в том, что при появлении предупреждения на странице отображается диалоговое окно, как и ожидалось, но в нем нет html. Затем, когда я щелкаю предупреждение, HTML-код показывает, как ожидалось.
Что я ожидаю, так это то, что html прикреплен, а затем запускается скрипт. Это не вариант. Я попробовал $(document).ready()
и $(window).load()
, а также $(document).ajaxComplete()
и $(document).ajaxSuccess()
без удачи. Это работает, если я поместил его в setTimeout с некоторой задержкой в миллисекунду. Но это .... неправильно.
Я должен также упомянуть, что я надеюсь на решение, которое не требует, чтобы я изменил запрос AJAX, поскольку у меня не всегда будет доступ к этому файлу - другие будут импортировать мои созданные файлы через ajax, используя указанный мной шаблон .