2014-11-23 62 views
0

我在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

你缺乏一个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

0

附加一个onload事件处理body标签这样或以其它方式使用eventListner.and检查时conetent是装通过ajax.check进行onreadystatechange。例如

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: “OK” 404:未找到页面