Javascript 简单的AJAX检索XML文件中的数据,在“错误”方面出错;。responseXML";

Javascript 简单的AJAX检索XML文件中的数据,在“错误”方面出错;。responseXML";,javascript,ajax,xml,Javascript,Ajax,Xml,我搜索了又搜索,检查了四遍拼写和语法,我被难住了。我甚至检查了“jslint”的语法。我已将所有代码放在“JSFIDLE”上: var xmlHttp=createXmlHttpRequestObject(); 函数createXmlHttpRequestObject(){ var-xmlHttp; if(window.XMLHttpRequest){ xmlHttp=新的XMLHttpRequest(); } 否则{ xmlHttp=新的ActiveXObject(“Microsoft.xm

我搜索了又搜索,检查了四遍拼写和语法,我被难住了。我甚至检查了“jslint”的语法。我已将所有代码放在“JSFIDLE”上:

var xmlHttp=createXmlHttpRequestObject();
函数createXmlHttpRequestObject(){
var-xmlHttp;
if(window.XMLHttpRequest){
xmlHttp=新的XMLHttpRequest();
}
否则{
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
}
返回xmlHttp;
}
函数过程(){
if(xmlHttp){
试一试{
open(“GET”,“data_people.xml”,true);
xmlHttp.onreadystatechange=handleStateChange;
xmlHttp.send(空);
} 
捕获(e){
警报(“进程内函数。
创建xmlHttp对象时出错:+e.toString()); } } } 函数handleStateChange(){ if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ 试一试{ HandlerResponse(); } 捕获(e){ 警报(“获取文本时遇到问题。”+e.toString()); } } 否则{ 警报(“状态=“+xmlHttp.readyState+”状态=“+xmlHttp.Status”); } } } 函数handleResponse(){ var xmlResponse=xmlHttp.responseXML, root=xmlResponse.documentElement, name=root.getElementsByTagName(“名称”), ssns=root.getElementsByTagName(“ssn”); 警报(xmlHttp.responseText); var=”;
对于(var i=0;i您在小提琴中设置javascript选项的方式,它只会执行
onLoad
(这意味着您的所有函数都将在onLoad函数中定义-并且在全局范围内或在执行所述函数之前都不可用)。这是一个顶部带有小点的catch 22。您需要将左侧的第二个下拉列表设置为
不换行
不换行

接下来是JSFIDLE示例代码。这里有一大堆错误:

  • 您应该已经引用了Request,而不是Request.XML(您刚刚编写的;P),并且您应该已经包含了MooTools库(左侧的第一个下拉列表),因为Request来自于此;)
  • url区分大小写!
    “/echo/xml/”
    ,而不是
    “/echo/xml/”
  • xml字符串需要使用正确的转义引号,javascript字符串不支持原始换行符(它们也可以转义…但这是另一个故事)-现在只需折叠它们
  • …但你不需要那个例子。只要用你自己的代码就行了

    请记住使用正确的测试url(使用
    POST
    而不是
    GET
    )并转义/折叠测试xml


    这是一把有效的小提琴:

    你的小提琴是糟糕的JavaScript。XML中的引号不会被转义。打开浏览器控制台查看。我在“JSFIDLE”或我的任何互联网搜索工作中都找不到你说的话。我怀疑我不知何故应该在“过程”中集成帖子和文件名函数。您的示例肯定会把一切都弄清楚。非常感谢您提供了一个非常清晰的示例。因此,这肯定解决了让我的代码能够使用“JSFIDLE”的问题就像在我的电脑上一样。现在我回到我的主要问题…为什么代码不能提取和数据以提供HandlerResponse()中的姓名列表函数?最后一点是,xml头中有需要删除的空白:
    这真是令人难以置信的尴尬。这和给教程的人发生的事情是一样的,我忘了回去更正它。令人惊讶的是,一个小小的空格竟然可以完全破坏代码。我可以打个勾,但我没有eno我还没放弃呢。非常感谢“rasmusfl0e”。
    
    var xmlHttp= createXmlHttpRequestObject();
    
    function createXmlHttpRequestObject(){
       var xmlHttp;
       if(window.XMLHttpRequest){
          xmlHttp = new XMLHttpRequest();
       }
       else{
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
       return xmlHttp;
    }
    
    function process() {
       if (xmlHttp) {
          try{
             xmlHttp.open("GET", "data_people.xml", true);
             xmlHttp.onreadystatechange = handleStateChange;
             xmlHttp.send(null);
          } 
          catch (e) {
            alert ("In process function.<br/>Error in creating xmlHttp object: "+ e.toString());
          }
       }
    }
    
    function handleStateChange() {
        if(xmlHttp.readyState==4) {
           if (xmlHttp.status==200) {
              try {
                 handleResponse();
              }
              catch(e) {
                 alert ("Trouble getting text." + e.toString());
              }         
            }
            else {
               alert ("State = "+xmlHttp.readyState+" Status= " + xmlHttp.status);
            }
        }
    }
    
    function handleResponse() {
        var xmlResponse = xmlHttp.responseXML,
            root = xmlResponse.documentElement,
            names = root.getElementsByTagName("name"),
            ssns = root.getElementsByTagName("ssn");
    
        alert (xmlHttp.responseText);
    
        var stuff = "";
        for(var i=0;i<names.length;i++) {
            stuff = names.item(i).firstChild.data + "-" + ssns.item(i).firstChild.data + "<br/>";
        }
        theD = document.getElementById("theD");
        theD.innerHTML = stuff;
    }