Hi,
du hast den Event onreadystatechange nicht verstanden. Inhalt wird erst gesetzt, wenn die Datei gelesen wurde, du versuchtst aber den Wert schon zurück zu geben wenn die Funktion mit grosser wahrscheinlichkeit noch gar nicht ausgelöst wurde.
Ja, da hatte ich mich wohl auch von der anonymen Funktion auf's Glatteis fuehren lassen, ich ging davon aus, das die ausreichend trennt. Nuetzt aber natuerlich sowieso nix, denn es wurde ja auch noch ausdruecklich asynchrone Abfrage bestellt.
Da wollte ich es aber nun ein wenig ordentlich machen und musste feststellen, das ich auf eine XML-Anfrage einen 304 zurueckbekomme, da der Opera (8.5) eine entsprechende Anfrage stellt (aber noch nicht geprueft, nur eine Vermutung).
Mache ich da 'was falsch?
(Basissystem ist ein Debian 3.0r2 mit Update vom 14.02.2004)
Aufrufende Datei:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Hu?</title>
<script type="text/javascript">
var xmlHttp = false;
function showHit(_Hit){
var temp1;
var temp2;
var Hit = _Hit;
temp1 = document.createElement("br");
temp2 = document.createTextNode(Hit);
document.getElementById("hitlist").appendChild(temp1);
document.getElementById("hitlist").appendChild(temp2);
}
function clearHits(){
var arnold = document.getElementById("hitlist");
var adam = arnold.cloneNode(false);
arnold.parentNode.replaceChild(adam,arnold);
}
function procData(){
response = xmlHttp.responseXML;
vn = response.getElementsByName("vorname")[0].firstChild.data;
nn = response.getElementsByName("nachname")[0].firstChild.data;
alert(nn);
showHit("Vorname:" + vn);
showHit("Nachname:" + nn);
}
function procResponse(){
if(xmlHttp.readyState == 4){//alert(xmlHttp.status);
if(xmlHttp.status == 200){
procData();
}
}
}
function getData(){
//var xmlHttp = false;
// Internet Explorer
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
xmlHttp = false;
}
}
// Mozilla, Opera und Safari
if (!xmlHttp && typeof XMLHttpRequest != 'undefined'){
xmlHttp = new XMLHttpRequest();
}
if (xmlHttp){
xmlHttp.open('GET', "data.xml", true);
xmlHttp.onreadystatechange = procResponse;
xmlHttp.send(null);
}
}
</script>
</head>
<body>
<form action="" onsubmit="getData();return false;">
Push button:<br>
<input type="button" value="push me!" onclick="getData();">
</form>
<div id="hitlist"></div>
</body>
</html>
Daten-XML:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE data [
<!ELEMENT data (row)+>
<!ATTLIST data
name CDATA #IMPLIED
atime CDATA #IMPLIED
ctime CDATA #IMPLIED
mtime CDATA #REQUIRED
>
<!ELEMENT row (cell)+>
<!ATTLIST row
id ID #REQUIRED
name CDATA #IMPLIED
atime CDATA #IMPLIED
ctime CDATA #IMPLIED
mtime CDATA #IMPLIED
>
<!ELEMENT cell (#PCDATA)>
<!ATTLIST cell
name CDATA #IMPLIED
atime CDATA #IMPLIED
ctime CDATA #IMPLIED
mtime CDATA #IMPLIED
>
<data mtime="Fri, 14 Oct 2005 15:43:54 +0200">
<row id="r001">
<cell name="vorname">Otto</cell>
<cell name="nachname">Meier</cell>
</row>
<row id="r002">
<cell name="vorname">Hans</cell>
<cell name="nachname">Schulze</cell>
</row>
</data>
Habe ich da jetzt irgendeinen bloeden Haken eingebaut (ist ja schon ungefaehr zwei Jahre her, das ich das letzte Mal mit XMLHttpRequest gearbeitet habe), ist das der Opera oder ein Bug im Apachen oder ... ?
so short
Christoph Zurnieden