Добавление элемента <script>
в документ через innerHTML
не (*) не выполняет его содержимое в виде скрипта.
Вы также пытаетесь вставить весь HTML-документ, включая <html>
, <head>
и <body>
внутри <div>
, что совершенно недопустимо.
Если вам нужно вернуть и HTML, и какой-то скрипт для выполнения, лучше вернуть объект JSON, например ::
{
"html": "<div id="Mathew"></div>",
"js": "document.getElementById(\"Mathew\").innerHTML='ajax is working';"
}
, затем проанализируйте объект JSON, установите innerHTML
на obj.html
и eval
на js
. (Хотя обычно сомнительно возвращать и выполнять произвольные сценарии, иногда это может быть полезно.)
(*: Да, обычно нет. Точно, когда содержимое элемента <script>
выполняется, зависит от браузера. Например, Firefox выполняет скрипт, когда вы добавляете / вставляете DOM HTMLScriptElement или предка в элемент, который является частью документ, в то время как IE выполняет его, когда вы впервые вставляете элемент в любой родительский элемент, будь то внутри документа или нет. В целом, избегайте вставки содержимого JavaScript-in-HTML в HTML.)