как запустить javascript в html, загруженном через ajax

У меня есть файл index.php, который загружает другие php-файлы через этот код javascript / ajax:

function AJAX(elementID,url,showStatus){ var httpObject; if (window.ActiveXObject) { httpObject = new ActiveXObject("Microsoft.XMLHTTP"); } if (window.XMLHttpRequest){ httpObject = new XMLHttpRequest(); } else { alert("Your browser does not support AJAX."); } if (httpObject != null) { httpObject.onreadystatechange = function() { if (elementID != false){ if (httpObject.readyState == 4 && httpObject.status == 200) { document.getElementById(elementID).innerHTML= httpObject.responseText; } } } httpObject.open("POST",url,true); httpObject.send(null); } } 

поэтому, например, я бы загрузил файл inxex.php:

 <script> AJAX("updateThisDiv", "/includes/contentpage.php", false) </script> 

который вставляет содержимое «contentpage.php» в div «updateThisDiv», но теперь, если у меня есть javascript на «contentpage.php», он не будет работать, есть ли способ сделать это?

Я посмотрел на это: http://www.javascriptkit.com/script/script2/ajaxpagefetcher.shtml, но это не то, что я искал.

Я хочу иметь возможность обновлять раздел моей страницы без перезагрузки всей страницы, а javascript должен запускаться

Solutions Collecting From Web of "как запустить javascript в html, загруженном через ajax"

Если вы хотите загрузить Javascript по требованию. Это можно сделать путем динамического создания тега скрипта. Этот рисунок иллюстрируется в книге Стояна Стефанова – Javascript Patterns

Это отрывалось из книги:

Напишите требуемую функцию. Затем назовите его так:

 require("extra.js", function () { functionDefinedInExtraJS(); }); 

Функция запроса образца:

 function require(file, callback) { var script = document.getElementsByTagName('script')[0], newjs = document.createElement('script'); // IE newjs.onreadystatechange = function () { if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') { callback(); } }; // others newjs.onload = function () { callback(); }; newjs.src = file; script.parentNode.insertBefore(newjs, script); } 

Живой пример найден в http://www.jspatterns.com/book/8/ondemand.html

@Edit: более подробная информация о вашем случае. Я постараюсь сделать все просто:

Создание четырех файлов:

  • index.php: тестовый файл.
  • code.js: фактический код, который имеет функции Ajax, getJS, getHTML
  • content.php: любой PHP-файл, который будет печатать чистый HTML без каких-либо JS
  • content.js: javascript, который вы хотите запустить динамически.

index.php

 <html> <head> <script src="code.js"></script> </head> <body> <input type="button" onclick="Ajax('content.php', 'd_html');" value="Fill from content.php"/> <div id="d_html"></div> <br> <input type="button" onclick="Ajax('content.js', 'd_js');" value="Fill from content.js"/> <div id="d_js"></div> </body> </html> 

content.php

 <span>Hello, I am dynamic span came from content.php</span> 

content.js

 //Ana javascript code you want to run it by Ajax function should go inside this function function executeJS(element){ element.innerHTML = "<span>Hello, I am dynamic span came from content.js</span>"; } 

code.js

 //This function responsible for doing the ajax request for any file that will return pure HTML. function getHTML(url, element){ var i, xhr, activeXids = [ 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP' ]; if (typeof XMLHttpRequest === "function") { // native XHR xhr = new XMLHttpRequest(); } else { // IE before 7 for (i = 0; i < activeXids.length; i += 1) { try { xhr = new ActiveXObject(activeXids[i]); break; } catch (e) {} } } xhr.onreadystatechange = function () { if (xhr.readyState !== 4) { return false; } if (xhr.status !== 200) { alert("Error, status code: " + xhr.status); return false; } element.innerHTML += xhr.responseText; }; xhr.open("GET", url, true); xhr.send(""); } //This function will load javascript file on-demand and call executeJS function inside that file. function getJS(url, element, cb){ var newjs = document.createElement('script'); // IE newjs.onreadystatechange = function () { if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') { cb(); } }; // others newjs.onload = function () { cb(); }; newjs.src = url; element.appendChild(newjs); } //This is same as your function, but now can handle both PHP and JS files function Ajax(url, id){ var element = document.getElementById(id), regex = /\.js$/; if(!element){ alert("Invalid ID"); return false; } if(regex.test(url)){ //If url ends with JS, load using getJS getJS(url, element, function(){ executeJS(element); }); } else { getHTML(url, element); } } 

Если вы динамически вставляете тег скрипта, код будет выполнен. НЕ ИСПОЛЬЗУЙТЕ ЭВОЛЮЦИЮ. Библиотеки знают это, они также не используют eval (если они не ужасны).

это работает на 100% ….. но я бы предпочел не использовать jquery

 <!DOCTYPE html> <html dir=”ltr” lang=”en-US”> <head> <meta charset=”UTF-8” /> <title>AJAX Detection And Data Loading Using New School jQuery & HTML5:</title> <script src=”https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js” type=”text/javascript”></script> <script type="text/javascript"> $(document).ready(function(){ $("button").click(function () { $("#mm").load("test.php"); }); }); </script> </head> <body> <button type=”button”>Load Some Copy!</button> <div id="mm"> </div> <section> </section> </body> </html>