Предотвратить запуск внедренного сценария JQuery перед внедрением html из того же файла в DOM после вызова AJAX - PullRequest
0 голосов
/ 09 ноября 2018

Кажется, я столкнулся с состоянием гонки при запуске скриптов, введенных в мою веб-страницу через 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, используя указанный мной шаблон .

...