加载时在请求的页面中执行功能

时间:2014-11-23 20:47:50

标签: javascript jquery ajax

我在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无法删除,因为页面刷新不再起作用

2 个答案:

答案 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:找不到页面