Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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 韩元';t执行嵌套for循环_Javascript_Html_Xml_For Loop_Xmlhttprequest - Fatal编程技术网

Javascript 韩元';t执行嵌套for循环

Javascript 韩元';t执行嵌套for循环,javascript,html,xml,for-loop,xmlhttprequest,Javascript,Html,Xml,For Loop,Xmlhttprequest,提前感谢您的帮助 我对javascript相当陌生,但我在java方面有相当深厚的背景,所以我想我会在我正在从事的这个项目上试用它 本质上,我要做的是从xml文件中读取数据,并为我正在制作的页面创建html代码。我用的是W3学校的剧本。我修改了它,让它从我自己的xml中提取数据,甚至生成我需要的更基本的html代码 以下是我用于所有测试/构建的页面: <head> <meta http-equiv="Content-Type" content="text/html; chars

提前感谢您的帮助

我对javascript相当陌生,但我在java方面有相当深厚的背景,所以我想我会在我正在从事的这个项目上试用它

本质上,我要做的是从xml文件中读取数据,并为我正在制作的页面创建html代码。我用的是W3学校的剧本。我修改了它,让它从我自己的xml中提取数据,甚至生成我需要的更基本的html代码

以下是我用于所有测试/构建的页面:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>xml test table</title>
<script>
    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","SWPlanetData.xml",false);
    xmlhttp.send();
    swDoc=xmlhttp.responseXML;
    var s=swDoc.getElementsByTagName("planet");
</script>
</head>
<body>
<div class="planets-info-container"> 
    <script>
            for (i=0;i<s.length;i++)
            {
                var plName
                    = s[i].getElementsByTagName("planetName")[0].childNodes[0].nodeValue;
            var plDesc
                = s[i].getElementsByTagName("description")[0].childNodes[0].nodeValue;
            var plUrl
                = s[i].getElementsByTagName("linkUrl")[0].childNodes[0].nodeValue;
            var plUrlTxt
                = s[i].getElementsByTagName("linkText")[0].childNodes[0].nodeValue;
            var plShowsList
                = s[i].getElementsByTagName("show");
            var plGamesList 
                = s[i].getElementsByTagName("videoGame");

            // test section
            var test = ''
            test += '<div><table border = "1">\n' +
                '<tr><td>' + s[i].getElementsByTagName("showText")[0].childNodes[0].nodeValue
                + '</td><td>' + s[i].getElementsByTagName("showUrl")[0].childNodes[0].nodeValue  + '</td></tr>' 
                + '<tr><td>' + s[i].getElementsByTagName("gameText")[0].childNodes[0].nodeValue + '</td><td>'
                +   s[i].getElementsByTagName("gameUrl")[0].childNodes[0].nodeValue + '</td></tr>'
                + '</tr></table></div>'                 
                document.write(test);
                document.close();
            // end section

            document.write("<div class=\"planet-info-container\" id=\""+plName+"-container\">");
                document.write("<div class=\"name-row\"><div class=\"planet-name\">"+plName+"</div></div>");
                document.write("<div class=\"desc-row\">");
                    document.write("<div class=\"planet-desc\">"+plDesc+"</div>");
                document.write("</div>");
                document.write("<div class=\"appearances-row\"><ol class=\"shows\"><li>shows list</li>");
                for(j=0;j<plShows.length;j++){
                    document.write("nested for");
                    var showUrl = s[i].getElementsByTagName("showUrl")[j].childNodes[0].nodeValue;
                    var showText = s[i].getElementByTagName("showText")[j].childNodes[0].nodeValue;
                    document.write("<li><a href=\""+showUrl+"\">"+showText+"</a></li>");
                }
                document.write("</ol><ol class=\"games\"> games list");
                for(j=0;j<s[i].getElementByTagName("videoGame").length;j++){
                    var gameUrl = s[i].getElementsByTagName("gameUrl")[j].childNodes[0].nodeValue;
                    var gameText = s[i].getElementByTagName("gameText")[j].childNodes[0].nodeValue;
                    document.write("<li><a href=\""+gameUrl+"\">"+gameText+"</a></li>");
                }
                document.write("</ol></div>");
                document.write("<div class=\"locs-row\">");
                document.write("</div>");
                document.write("<div class=\"races-row\">");
                document.write("</div>");
                document.write("<div class=\"chars-row\">");
                document.write("</div>");
                document.write("<div class=\"links-row\">");
                    document.write("<div class=\""+plName+"-link\"><a href=\""+plUrl+"\">"+plUrlTxt+"</a></div>");
                document.write("</div>");
                document.write("</div><br />");
            }
        </script> 
</div>
</body>

xml测试表
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
open(“GET”,“SWPlanetData.xml”,false);
xmlhttp.send();
swDoc=xmlhttp.responseXML;
var s=swDoc.getElementsByTagName(“行星”);
对于代码中的(i=0;i:

> var s = swDoc.getElementsByTagName("planet");
希望swDoc是对XML文档的引用

> var plShowsArr = s[i].getElementsByTagName("show");
您还没有显示声明或初始化
i
的位置,因此这里可能会出现错误。此外,名称
plShowsArr
推断您认为它是一个数组,它不是,返回一个,这与数组类似,因为它具有自调整长度属性,并且可以通过索引访问成员。但这就是相似之处结束

> document.write("<div><table border = \"1\">");
稍后你会:

> document.write('<div class="appearances-row"><ol class="shows">shows list');
>document.write('showslist');
这将插入一个文本节点作为OL元素的子元素。这是不允许的,接下来发生的任何事情都取决于实现,您的猜测和我的一样好。您已将用户代理置于不确定状态

然后:


>对于(j=0;j至少,我认为您需要两个更改

移动以下两行:

var plShowsArr = s[i].getElementsByTagName("show");
var plGamesArr = s[i].getElementsByTagName("videoGame");
…到外部
for
循环的内部。这两行都试图访问由
i
变量索引的当前“行星”元素的子元素

更新内部
for
语句,该语句目前正在使用
plshowsar.length
,但应该使用
plshowsar.length

可选地,可以通过从当前“show”中选择“showUrl”和“showText”来改进内部循环,而不是从当前“planet”中选择它们:


for(j=0;j如果你想知道的话,这对我来说是个愚蠢的决定

var showUrl = plShowsArr[j].getElementsByTagName("showUrl")[0].childNodes[0].nodeValue;

就在这里:


其中表示
j
var plShowsArr=s[i].getElementsByTagName(“show”);
我从何而来然后下面的循环再次使用i?也就是说:mcdwight6需要使用前面提到的fix-irelephant,从前面提到的行Marcus中删除
[i]
,并删除
[i]
从它后面的一行开始。控制台中的任何内容?可能不相关,但-不建议使用document.write in a loop。改为附加到字符串,改为使用innerHTML。如果在页面呈现后调用函数,则会使用document中断页面。writey您说得对,会出现几个错误n在我发布代码的整个过程中。我试图复制和粘贴相关的片段以减少混乱,但似乎我对一些事情排序错误。不过,我确实喜欢你所说的连接标记以减少负担。我会看看我能做些什么。所以你认为嵌套for循环的问题在于j不是initia我不知道为什么它不起作用,它不应该是关于
j
变量的,更可能是与
文档的使用有关。写
和无效标记。我想我只是用concat然后打印就解决了一些问题。它将进入show循环,但在完成第一次迭代之前会中断。我已经尝试使用s[i]并将其关闭,以尝试从plShowsList中引用它,但没有效果。有什么想法吗?
> document.write('<div class="appearances-row"><ol class="shows">shows list');
>  for(j=0;j<plShows.length;j++){
var plShowsArr = s[i].getElementsByTagName("show");
var plGamesArr = s[i].getElementsByTagName("videoGame");
       for(j=0;j<plShowsArr.length;j++){
            document.write("nested for");
            var showUrl = plShowsArr[j].getElementsByTagName("showUrl")[0].childNodes[0].nodeValue;
            var showText = plShowsArr[j].getElementByTagName("showText")[0].childNodes[0].nodeValue;
            document.write("<li><a href=\""+showUrl+"\">"+showText+"</a></li>");
        }
var showUrl = plShowsArr[j].getElementsByTagName("showUrl")[0].childNodes[0].nodeValue;
var showText = plShowsArr[j].getElementByTagName("showText")[0].childNodes[0].nodeValue;