2012-02-13 170 views
0

编辑 谢谢大家的帮助。我使用try和catch(err)对脚本进行了修改,但是,当代码运行时,我仍然没有得到警报。我还用“studentInfo [i] .getElementsByTagName(”id“)[0] .childNodes [0]替换了”studentInfo [i] .getElementsByTagName(“id”)[i] .childNodes [i] .nodeValue“。 nodeValue“以及所有类似的引用,除了现在,它甚至不会返回第一个循环。由于某种原因,它在“捕捉”之前似乎正在退出该功能。我已将这些变化标记为粗体。循环停止在第一次迭代


我知道这已经公布了不少关于这个网站,但没有一个答案似乎很能帮助我。我有一个for循环停止在第一个循环后迭代。来自第一个循环的数据是正确的,但我需要它继续循环。我使用了两种不同的lint工具,他们说我的代码是有效的,所以我必须迫使它退出循环。有人帮我弄清楚我做错了什么,请。

<html> 
    <head> 
    <title>Tardy Reporting</title> 
    <script type="text/javascript" src="students.js"> 
    </script> 
    </head> 
    <body> 

    <h1>Scan in Student ID</h1> 
    <form method="POST" name="idForm" id="idForm" /> 
    <input type="text" name="idNumber" id="idNumber"/> 
    <input type="button" name="Search" value="Search" onClick="getId(document.idForm.idNumber.value);" /> 
    </form> 
    <br></br> 
    <div id="div1"></div> 
    <p> 
    </body> 
    </html> 

var ajxObj; 
    if(window.XMLHttpRequest){ 
    ajxObj = new XMLHttpRequest(); 
    } 
    else{ 
    ajxObj = new ActiveXObject('Microsoft.XMLHTTP'); 
    } 
ajxObj.open("GET","studentbase.xml",false); 
ajxObj.send(); 
xmlData = ajxObj.responseXML; 
var studentInfo = xmlData.getElementsByTagName("student"); 

function getId(studentId) { 
    **try{** 
    for(var i = 0; i < studentInfo.length; i++) { 
     if(studentId == **studentInfo[i].getElementsByTagName("id")[0].childNodes[0].nodeValue || studentId === studentInfo[i].getElementsByTagName("name")[0].childNodes[0].nodeValue**){ 
      document.getElementById('div1').innerHTML=(studentInfo[i].getElementsByTagName("name")[0].childNodes[0].nodeValue); 
     } 
     else { 
     document.getElementById('div1').innerHTML="Error: Not Found" 
     } 
    } 
    **}catch (err){ 
     alert(err.ToString()); 
    }** 

}


<?xml version="1.0" encoding="UTF-8" ?> 

<thebase> 
    <student> 
    <id>50011234</id> 
     <name>Mike Simpson</name> 
     <grade>n/a</grade> 
     <teacher>George Washington</teacher> 
     <tardies>0</tardies> 
    </student> 
    <student> 
     <id>50</id> 
     <name>Greg Pollard</name> 
     <grade>n/a</grade> 
     <teacher>Darth Vadar</teacher> 
     <tardies>0</tardies> 
    </student> 
    <student> 
     <id>50013456</id> 
     <name>Jason Vigil</name> 
     <grade>n/a</grade> 
     <teacher>Obi Wan Kenobi </teacher> 
     <tardies>0</tardies> 
    </student> 
</thebase> 
+0

您可能只需在循环前添加'console.log(studentInfo)'来查看实际返回的内容。发布到你的问题,我们会看到有什么错误。 – caleb 2012-02-13 23:05:02

+0

我得到“[object HTMLCollection]” – vhazon 2012-02-14 15:14:57

回答

3

我怀疑你的代码抛出一个错误,你都没有意识到这一点。我怀疑引用“studentInfo [i] .getElementsByTagName(”id“)[i] .childNodes [i] .nodeValue”应该是“studentInfo [i] .getElementsByTagName(”id“)[0] .childNodes [0]。的nodeValue”。

尝试把一个 “的try ... catch” 围绕 “for” 循环,就像这样:

function getId(studentId) { 
    try { 
     for(var i = 0; i < studentInfo.length; i++) { 
      if (studentId == studentInfo[i].getElementsByTagName("id")[i].childNodes[i].nodeValue || studentId === studentInfo[i].getElementsByTagName("name")[i].childNodes[i].nodeValue){ 
       document.getElementById('div1').innerHTML=(studentInfo[i].getElementsByTagName("name")[0].childNodes[0].nodeValue); 
      } 
      else { 
      document.getElementById('div1').innerHTML="Error: Not Found" 
      } 
     } 
    } catch (err) { 
     alert(err.ToString()); 
    } 
} 
+0

我真的认为这是答案 – 2012-02-13 23:14:48

+0

我同意。这可能是问题。这就是为什么它会在第一遍上工作,因为我== 0然后。 – pseudosavant 2012-02-13 23:32:23

0

有需要的是三个等号(即 “===”。)在if声明。