在AJAX调用之后执行引用的js

时间:2012-11-05 17:13:01

标签: javascript ajax execute

我想执行一个动态添加到页面的脚本(通过innerHTML)我发现了这个:

how to execute ajax output script

哪个很近,但没有雪茄。我在我的AJAX响应中得到了其中一个(以及其他内容):

<link rel=StyleSheet href="/my/css/file.css" type="text/css"/>
<h1>Some header</h1>
<div>Some text</div>
<ul><li>Some text</li><li>Some Text</li></ul>
<script src='my/js/file.js'></script>

我试图在将它附加到我的容器元素之后(通过innerHTML)来评估它:

scripts = mycontainer.querySelectorAll('script');
for (k=0;k<scripts.length;k++){
    eval(scripts[k]);
}

但无济于事。有任何想法吗?请没有图书馆! (也不需要后退,只需要大多数现代浏览器。)

CSS加载就好了。 JS文件存在并被正确引用。

2 个答案:

答案 0 :(得分:0)

没有你的代码,我只会做一些假设。

scriptlist.php

<?php
   //get script list somehow.
   $script_list = array('my/js/file1.js', 'my/js/file2.js', 'my/js/file3.js');
   echo json_encode($script_list);
?>

page.html中

function ajaxRequest(){
 var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
 if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
  for (var i=0; i<activexmodes.length; i++){
   try{
    return new ActiveXObject(activexmodes[i])
   }
   catch(e){
    //suppress error
   }
  }
 }
 else if (window.XMLHttpRequest) // if Mozilla, Safari etc
  return new XMLHttpRequest()
 else
  return false
}

var mygetrequest=new ajaxRequest()
mygetrequest.onreadystatechange=function(){
 if (mygetrequest.readyState==4){
  if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
   var scripts = eval("("+mygetrequest.responseText+")") //retrieve result as an JavaScript object
   var headID = document.getElementsByTagName("head")[0];
   for (k=0;k<scripts.length;k++){
      var newScript = document.createElement('script');
      newScript.type = 'text/javascript';
      newScript.src = scripts[k];
      headID.appendChild(newScript);
   }

  }
  else{
   alert("An error has occured making the request")
  }
 }
}

mygetrequest.open("GET", "scriptlist.php", true)
mygetrequest.send(null)

参考。使用:

答案 1 :(得分:0)

除非有人想出更好的方法......

我将最终使用AJAX调用来获取每个脚本src,并评估返回值。我稍后会在这里发布相关代码。