how to run javascript in html loaded via ajax(如何在通过ajax加载的html中运行javascript)
问题描述
我有一个 index.php 文件,它通过这个 javascript/ajax 代码加载其他 php 文件:
I have an index.php file that loads other php files via this javascript/ajax code:
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 中加载一个文件:
so for example I would load a file in inxex.php by:
<script>
AJAX("updateThisDiv", "/includes/contentpage.php", false)
</script>
这会将contentpage.php"的内容粘贴到 divupdateThisDiv"但现在如果我在contentpage.php"上有任何 javascript,它将无法运行,有什么办法吗?
which would paste the contents of "contentpage.php" into the div "updateThisDiv" but now if I have any javascript on "contentpage.php", it will not run, is there any way to do this?
我看过这个:http://www.javascriptkit.com/script/script2/ajaxpagefetcher.shtml但它并不是我想要的.
I have looked at this: http://www.javascriptkit.com/script/script2/ajaxpagefetcher.shtml but its not exatcly what I was looking for.
我希望能够在不重新加载整个页面的情况下更新页面的一部分并且必须运行 javascript
I want to be able to update a section of my page without reloading the entire page and javascript must run
推荐答案
如果你想按需加载 Javascript.这可以通过动态创建脚本标签来完成.这种模式在 Stoyan Stefanov 书 - Javascript 模式
If you want to load Javascript on demand. This can be done by dynamically creating script tag. This pattern illustrated in Stoyan Stefanov book - Javascript Patterns
这是从书中摘录的:
编写一个需求函数.然后这样称呼它:
Write a require function. Then call it like this:
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:针对您的案例的更多详细信息.我会尽量让事情变得简单:
@ more details specific to your case. I will try to make things simple:
创建四个文件:
- index.php : 测试文件.
- code.js : 具有 Ajax、getJS、getHTML 函数的实际代码
- content.php : 任何无需 JS 即可打印纯 HTML 的 PHP 文件
- 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>
内容.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);
}
}
这篇关于如何在通过ajax加载的html中运行javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在通过ajax加载的html中运行javascript
- 正确分离 PHP 中的逻辑/样式 2021-01-01
- 没有作曲家的 PSR4 自动加载 2022-01-01
- Mod使用GET变量将子域重写为PHP 2021-01-01
- Laravel 仓库 2022-01-01
- 如何定位 php.ini 文件 (xampp) 2022-01-01
- PHP Count 布尔数组中真值的数量 2021-01-01
- 带有通配符的 Laravel 验证器 2021-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 从 PHP 中的输入表单获取日期 2022-01-01
- SoapClient 设置自定义 HTTP Header 2021-01-01