AJAX mit Javascript XML Daten extrahieren

b_d

Grünschnabel
Hallo, ich hoffe mir kann hier jemand helfen ich komme nicht weiter. Bei der letzten Funktion getCatInfo, verliere ich meine XML Datei und ich weiß nicht wie ich in der Funktion auf sie zugreifen soll. Habe etliches probiert und was dort aktuell steht ist nicht korrekt.


Javascript:
function getKitties() {
  var xcat = new XMLHttpRequest();
  xcat.onreadystatechange = function() {
   //if (xcat.readyState == 4 && xcat.status == 200 ) {
   if (this.readyState == 4 && this.status == 200) {
     //myCat(xcat.repsonseXML);
     myCat(this);
     //getCatInfo(this);
   }
  };
  xcat.open("GET", "cats.xml", true);
  xcat.send();
}

function myCat(cx) {
  //var i;
  var xDoc = cx.responseXML;
  var output = '<form>';
  var cat = xDoc.getElementsByTagName("cat");
  output += '<select id ="cat_select" onchange="catSelect()" >';

  for (var i = 0; i < cat.length; i++) {
   output += '<option value ="' + i + '">' +
     cat[i].getElementsByTagName("name")[0].childNodes[0].nodeValue +
     '</option>'
  }
  output += '</select>';
  output += '</form>';

  document.getElementById("cat_name").innerHTML = output;
}

function catSelect() {
  var selectBox = document.getElementById("cat_select");
  var catIndex = selectBox.options[selectBox.selectedIndex].value;
  getCatInfo(catIndex);
}


/* Diese Funktion funktioniert nicht und var iDoc = i.responseXML; ist komplett falsch, war bloß ein Versuch. 
*/

function getCatInfo(i) {

//var i;
var iDoc = i.responseXML;
var cat = i.getElementsByTagName("cat");
var output = '';
output +=
  '<li>: ' + cat[i].getElementsByTagName("image")[0].childNodes[0].nodeValue + '</li>';
output +=
  '<li> Traits: ' + cat[i].getElementsByTagName("traitsSection")[1].childNodes[3].nodeValue + '</li>';
output +=
  '<li> Life Durance: ' + cat[i].getElementsByTagName("years")[0].childNodes[0].nodeValue + '</li>';
output +=
  '<li> Size in inches: ' + cat[i].getElementsByTagName("size")[0].childNodes[0].nodeValue + '</li>';

document.getElementById("cat_info").innerHTML = output;

}
 
Hi,

in der Funktion getCatInfo() befindet sich das XML-Dokument nicht mehr im scope.
Du könntest das Problem mit closure beheben.

Alternative:
Die Variable xDoc ist nur im scope von der func myCat sichtbar. Wenn Du die Variable außerhalb der Funktion definierst, ist sie auch für getCatInfo() sichtbar.
 
I habe das außerhalb aller Funktionen geschrieben -
var xcat = new XMLHttpRequest();
var xDoc = xcat.repsonseXML;
und es scheint es erneut nicht zu kennen
 
Zurück