我在ajax调用中遇到了javascript问题
我的脚本如下所示:
<html>
<body>
<div>contains large files to load</div>
<script type="text/javascript">
window.onload = function() {
alert('content is completely loaded');
}
</script>
</body>
</html>
当我重新加载页面时,它正在运行,但是当我使用ajax调用动态加载此文件时。
我的代码实际加载并执行ajax调用中的所有脚本:
var tmp;
tmp = document.implementation.createHTMLDocument();
tmp.body.innerHTML = xmlhttp.responseText;
var scripts = tmp.getElementsByTagName('script');
var scripts_length = scripts.length;
for(i = 0; i < scripts_length; ++i) {
var script_tag = document.createElement('script');
script_tag.setAttribute('src', scripts[i].getAttribute('src'));
script_tag.setAttribute('type', 'text/javascript');
script_tag.setAttribute('charset', 'utf-8');
document.body.appendChild(script_tag);
}
当有人刷新页面时以及内容加载了ajax时,如何让所有脚本执行?
所以:我的脚本正在加载但没有执行,因为window.onload,但是window.onload无法删除,因为页面刷新不再起作用
答案 0 :(得分:0)
您的代码中缺少 eval 函数,因为您描述的方法只会将响应中的脚本添加到页面中。您可以尝试使用以下功能
// this function create an Array that contains the JS code of every <script> tag in parameter
// then apply the eval() to execute the code in every script collected
function parseScript(strcode) {
var scripts = new Array(); // Array which will store the script's code
// Strip out tags
while(strcode.indexOf("<script") > -1 || strcode.indexOf("</script") > -1) {
var s = strcode.indexOf("<script");
var s_e = strcode.indexOf(">", s);
var e = strcode.indexOf("</script", s);
var e_e = strcode.indexOf(">", e);
// Add to scripts array
scripts.push(strcode.substring(s_e+1, e));
// Strip from strcode
strcode = strcode.substring(0, s) + strcode.substring(e_e+1);
}
// Loop through every script collected and eval it
for(var i=0; i<scripts.length; i++) {
try {
eval(scripts[i]);
}
catch(ex) {
// do what you want here when a script fails
}
}
}
这里有完整的文章http://coursesweb.net/ajax/execute-javascript-code-ajax-response_t
答案 1 :(得分:0)
将onload事件处理程序附加到body标记,或者使用eventListner.and来检查ajax.check是否为onreadystatechange加载了conetent。例如
function makerequest(serverPage, objID) {
var obj = document.getElementById(objID);
obj.innerHTML = '<b>Loading....</b>';
xmlhttp.open("GET", serverPage);
xmlhttp.onreadystatechange = function() {
//perform mystunts
}
}
xmlhttp.send(null);
}
您可以使用状态代码检查您想要的任何内容。
参见w3school.com的参考资料
onreadystatechange事件 当发送对服务器的请求时,我们希望根据响应执行一些操作。
每次readyState更改时都会触发onreadystatechange事件。
readyState属性保存XMLHttpRequest的状态。
XMLHttpRequest对象的三个重要属性:
onreadystatechange存储每次readyState属性更改时要自动调用的函数(或函数名称) readyState保存XMLHttpRequest的状态。从0到4的变化: 0:请求未初始化 1:建立服务器连接 2:收到请求 3:处理请求 4:请求完成并且响应准备就绪 状态200:“确定” 404:找不到页面