Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用外部JS从XML导入数据_Javascript_Xml_External Js - Fatal编程技术网

Javascript 使用外部JS从XML导入数据

Javascript 使用外部JS从XML导入数据,javascript,xml,external-js,Javascript,Xml,External Js,我的HTML文件中有很多javascript代码(1500行),我想将其中的一部分移到另一个js文件中。我想制作一个文件来导入数据,我可以找到最好的方法 这是我的gameDataImport.js文件: function gameImport(gameID){ xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET","../riskmanagment/Data/gameData.xml",false); xmlhttp.send(); xmlDoc=

我的HTML文件中有很多javascript代码(1500行),我想将其中的一部分移到另一个js文件中。我想制作一个文件来导入数据,我可以找到最好的方法

这是我的gameDataImport.js文件:

function gameImport(gameID){
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","../riskmanagment/Data/gameData.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

var numberOfWorkers;

var x=xmlDoc.getElementsByTagName("game");
for (i=0;i<x.length;i++)
{
    if(x[i].getAttribute('id') == gameID)
    {
        this.gameName = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
        this.numberOfWorkers = x[i].getElementsByTagName("numberOfWorkers")[0].childNodes[0].nodeValue;
        this.numberOfWorkersLeft = numberOfWorkers;
        this.overtimeWorkers = x[i].getElementsByTagName("overtimeWorkers")[0].childNodes[0].nodeValue;
        this.overtimeWorkersLeft = overtimeWorkers;
        this.difficulty = x[i].getElementsByTagName("difficulty")[0].childNodes[0].nodeValue;
        this.budget = x[i].getElementsByTagName("budget")[0].childNodes[0].nodeValue;
        this.gameTargetMinutes = x[i].getElementsByTagName("targetGameTime")[0].childNodes[0].nodeValue;
        this.gameTargetDays = x[i].getElementsByTagName("targetDays")[0].childNodes[0].nodeValue;
        this.gameLanguage = x[i].getElementsByTagName("language")[0].childNodes[0].nodeValue;
        this.projectDescriptionText = x[i].getElementsByTagName("description")[0].childNodes[0].nodeValue;
        this.wage = x[i].getElementsByTagName("wage")[0].childNodes[0].nodeValue;
        this.Owage = x[i].getElementsByTagName("Owage")[0].childNodes[0].nodeValue;
        this.numberOfRisks = x[i].getElementsByTagName("numberOfRisks")[0].childNodes[0].nodeValue;
    }
}
但我只得到这个错误:

未捕获的TypeError:无法读取未定义的属性“numberOfWorkers”


我没有尝试过多个变量,但将首先尝试该变量

您忘记了GameImport函数的右括号

我不知道这是否有帮助,但我解决了这个问题,删除了脚本的type属性,如下所示:

<script src="js/gameDataImport.js"></script>


很抱歉,因为我不知道type属性的真正含义,而且一直都在使用它,所以我一定会试试这个。实际上。。。现在我阅读了xmlhttp请求,看起来您正在创建一个同步请求,所以我所说的一切都是无效的(我删除了我的答案):-(是的,例如,我在发布到php时使用了ajax请求。我的xmlrequests在与其余代码在同一文件中使用时工作正常,因此我认为有这么多更改会很奇怪。无论如何,谢谢,但不管statr处理如何,这仍然不是一个好方法。我不想为每个变量调用gameImport,因为xml文件需要为每个变量加载一次。因此,要么我想返回一个游戏对象,要么我想说:var game=new gameImport(2);然后numberOfWorkers=game.numberOfWorkers;
numberOfWorkers = gameImport(gameID).numberOfWorkers;
<script src="js/gameDataImport.js"></script>