包含xml文件的javascript文件

时间:2013-02-07 16:32:20

标签: javascript xml

我有这个代码......

    <script type="text/javascript">
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET", "Client-Controls/ClientGridView.xml", true);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;

    var oHead = document.getElementsByTagName('HEAD').item(0);
    var x = xmlDoc.getElementsByTagName("script");
    for (i = 0; i < x.length; i++) {
        var oScript = document.createElement("script");
        oScript.language = "javascript";
        oScript.type = "text/javascript";
        oScript.src = x[i].childNodes[0].nodeValue;
        oHead.appendChild(oScript);
    }
</script>

这渲染了一些,但我不能使用javascript文件函数......可以做什么诀窍??

2 个答案:

答案 0 :(得分:0)

您的脚本将异步加载,因此您无法立即使用它们。给他们一个onload处理程序,以便你知道他们什么时候准备好了:

var oScript = document.createElement("script");
oScript.type = "text/javascript";
oScript.src = x[i].childNodes[0].nodeValue;
oScript.onload = function () {
    // run bar, which is contained in foo.js
    bar();
};
oHead.appendChild(oScript);

如果您想确保所有脚本都已加载,您可以创建一个计数器:

function counter(count, callback) {
    return function() {
        count -= 1;
        if (count === 0) {
            callback();
        }
    }
}

并将其传递给每个加载处理程序:

var x = xmlDoc.getElementsByTagName("script"),
    countdown = counter(x.length, function(){ alert("All scripts loaded!"; });
for (i = 0; i < x.length; i++) {
    var oScript = document.createElement("script");
    oScript.type = "text/javascript";
    oScript.src = x[i].childNodes[0].nodeValue;
    oScript.onload = countdown;
    oHead.appendChild(oScript);
}

答案 1 :(得分:0)

扩展丹尼斯的观点,在Javascript文件中添加一个您尝试获取的变量并检查该变量是否存在或是否为整数,请检查值。无论如何,您可以在Javascript中轻松完成此操作。这有两种方式。

选项一

&#13;
&#13;
var neededScript = document.createElement("script");
n//if you want the script to be asynchronous, then set the async attribute like this:
neededScript.async="";
//then point the [src] attribute to the required script.
neededScript.src="src";
document.head.appendChild(neededScript);
&#13;
&#13;
&#13; (可选)如果您要将script附加到body,则代替document.head.appendChild使用document.body.appendChild。您可以使用document.getElementByIddocument.getElementsByClassName将子项附加到任何元素,或者如果您想按标记名称过滤元素(<html>是标记),请使用document.getElementByTagName或 - my来自jQuery的个人喜爱 - document.querySelector。您应该阅读所有这些方法,因为它们对操纵DOM至关重要。

第二个选项

第二个选项是使用一个非常流行的库jQuery。它的语法比文档API语法短很多。它的主要目的是使DOM操作更容易。

&#13;
&#13;
var requiredScriptSrc="src";
$("head").append("<script src='"+requiredScriptSrc+"'></script>");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13; jQuery使用selectors,如果你尝试过CSS或document.querySelector,你应该熟悉它们。

选项三

选项三是使用custom tagsfor循环获取custom tag的属性并创建脚本元素。

&#13;
&#13;
for(var i = 0; i<document.getElementsByTagName("js-module").length; i++){
  var s = document.getElementsByTagName("js-module")[i].getAttribute("src");
  var r = document.createElement("script");
  r.src = s;
  document.head.appendChild(r);
}
&#13;
<js-module src="src"></js-module>
&#13;
&#13;
&#13;


如果您需要更多帮助,请对此帖发表评论。