Есть div под названием Content:
<div id="content"></div>
Он должен быть заполнен данными из файла PHP с помощью AJAX, включая <script>
тег. Однако сценарий внутри этого тега не выполняется.
<div id="content"><!-- After AJAX loads the stuff that goes here -->
<script type="text/javascript">
//code
</script>
<!-- More stuff that DOES work here -->
</div>
javascript
html
ajax
JCOC611
источник
источник
window.onload
я создамXMTHttpRequest
объект для запроса другой (php) страницы, содержащей содержимое div, включая скрипт. Я делаю это с помощью простого JS, без библиотек (кроме моего собственного лол)Ответы:
JavaScript, вставленный как текст DOM, не будет выполняться. Однако вы можете использовать динамический шаблон сценария для достижения своей цели. Основная идея состоит в том, чтобы переместить сценарий, который вы хотите выполнить, во внешний файл и создать тег сценария, когда вы получите ответ Ajax. Затем вы устанавливаете
src
атрибут своего тега скрипта и вуаля, он загружает и выполняет внешний скрипт.Другой пост на StackOverflow также может быть вам полезен: можно ли вставлять скрипты с помощью innerHTML? .
источник
$('#audit-view script').each(function (index, element) { eval(element.innerHTML); })
Я использовал этот код, он работает нормально
источник
Если вы загрузите блок скрипта в свой div через Ajax следующим образом:
... он просто обновляет DOM вашей страницы, myFunction () не обязательно вызывается.
Вы можете использовать метод обратного вызова Ajax, такой как метод jQuery ajax (), чтобы определить, что выполнять после завершения запроса.
То, что вы делаете, отличается от загрузки страницы с включенным в нее JavaScript с самого начала (который действительно выполняется).
Пример того, как использовать обратный вызов успеха и обратный вызов ошибки после получения некоторого контента:
Другой быстрый и грязный способ - использовать eval () для выполнения любого кода сценария, который вы вставили как текст DOM, если вы не хотите использовать jQuery или другую библиотеку.
источник
Вот сценарий, который оценивает все теги сценария в тексте.
Просто вызовите эту функцию после получения HTML-кода с сервера. Будьте осторожны: использование
eval
может быть опасным.Демо: http://plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p=preview
источник
У меня это «просто работает» с использованием jQuery, при условии, что вы не пытаетесь добавить в документ подмножество HTML-кода, возвращенного XHR. (См. Этот отчет об ошибке показана проблема с jQuery.)
Вот пример, показывающий, как это работает:
Вот эквивалент приведенного выше: http://jsfiddle.net/2CTLH/
источник
Вот функция, которую вы можете использовать для анализа ответов AJAX, особенно если вы используете minifiedjs и хотите, чтобы он выполнял возвращенный Javascript или просто хотите анализировать сценарии, не добавляя их в DOM, он также обрабатывает ошибки исключения. Я использовал этот код в библиотеке php4sack, и он полезен вне библиотеки.
источник
Если вы вводите что-то, для чего нужен тег скрипта, вы можете получить неперехваченную синтаксическую ошибку и сказать незаконный токен . Чтобы этого избежать, избегайте косых черт в закрывающих тегах скрипта. т.е.
То же самое касается любых закрывающих тегов, таких как тег формы.
источник
У меня здесь был похожий пост, загрузка addEventListener при загрузке ajax БЕЗ jquery
Как я решил, это было вставить вызовы функций в мою функцию stateChange. На странице, которую я настроил, было 3 кнопки, которые загружали 3 разные страницы в contentArea. Поскольку мне нужно было знать, какая кнопка была нажата для загрузки страницы 1, 2 или 3, я мог легко использовать операторы if / else, чтобы определить, какая страница загружается, а затем какую функцию запускать. Я пытался зарегистрировать разные прослушиватели кнопок, которые работали бы только при загрузке определенной страницы из-за идентификаторов элементов ..
так...
если (page1 загружается, pageload = 1) запустить функцию registerListeners1
то же самое для страницы 2 или 3.
источник
Это сработало для меня, вызвав eval для каждого содержимого скрипта из ajax .done:
источник
Мой вывод: HTML не поддерживает теги NESTED SCRIPT. Если вы используете javascript для внедрения HTML-кода, который включает теги сценария внутри, это не сработает, потому что javascript также входит в тег сценария. Вы можете проверить это с помощью следующего кода, и вы убедитесь, что он не будет работать. Вариант использования: вы вызываете службу с помощью AJAX или аналогичного, вы получаете HTML и хотите напрямую вставить его в HTML DOM. Если введенный HTML-код содержит теги SCRIPT, работать не будет.
источник
Еще нужно загрузить страницу с помощью скрипта, например:
Это загрузит страницу, затем запустит сценарий и удалит обработчик событий, когда функция будет запущена. Это не будет запускаться сразу после загрузки ajax, но если вы ждете, пока пользователь введет элемент div, это будет работать нормально.
PS. Требуется JQuery
источник