Ajax: eine weitere Datei "requesten" nach Abarbeiten der Ersten
Flo
- javascript
Hi!
Ich benutze für Requests meiner xml-Dateien AJAX und möchte wissen, ob ich nachdem ich eine Datei abgearbeitet habe eine zweite laden kann. Und wenn ja, dann wie?
Freue mich auf Eure Antworten!
Ich benutze für Requests meiner xml-Dateien AJAX und möchte wissen, ob ich nachdem ich eine Datei abgearbeitet habe eine zweite laden kann. Und wenn ja, dann wie?
Genauso wie du die erste geladen hast. Du kannst auch beide gleichzeitig laden.
Aber dann kommt die erste nicht mehr an! Sondern die zweite überschreibt irgendwie die erste!? Zumindest hat es mit dem gleich nacheinander aufrufen nicht geklappt!
Ich benutze für Requests meiner xml-Dateien AJAX und möchte wissen, ob ich nachdem ich eine Datei abgearbeitet habe eine zweite laden kann. Und wenn ja, dann wie?
Genauso wie du die erste geladen hast. Du kannst auch beide gleichzeitig laden.
Ich benutze für Requests meiner xml-Dateien AJAX und möchte wissen, ob ich nachdem ich eine Datei abgearbeitet habe eine zweite laden kann.
Aber dann kommt die erste nicht mehr an! Sondern die zweite überschreibt irgendwie die erste!? Zumindest hat es mit dem gleich nacheinander aufrufen nicht geklappt!
Dann hast du vermutlich irgendwo irgendwie dieselbe Variable bzw. dasselbe Objekt für beide Dateien verwendet. Genaueres lässt sich ohne Genaueres zum Code nicht sagen.
Also mein Quelltext sieht zu Zeit so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Der Vertretungsplan-Finder</title>
<link rel="stylesheet" type="text/css" href="vplan.css"/>
<script type="text/javascript" language="javascript">
var ausgabe;
function anzeigen () {
ausgabe = '';
makeRequest('080604.xml');
makeRequest('080605.xml');
document.getElementById('ausgabe').innerHTML = ausgabe;
}
var http_request = false;
function makeRequest(url) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Es tut uns leid, aber dein Browser wird nicht unterstützt!');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('GET', url, true);
http_request.send(null);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
//Ab hier Abfragenprogrammierung
var xml = http_request.responseXML;
var klasse = document.Klasse.Klasse.options[document.Klasse.Klasse.selectedIndex].value;
var tempausgabe = '';
var datenvorhanden = false;
tempausgabe = tempausgabe + '<p>'+
'<span class="vpfuer">Vertretungsplan für <span class="vpfuerdatum">' + xml.getElementsByTagName('titel')[0].firstChild.nodeValue + '</span></span><br>'+
'aktualisiert am '+ xml.getElementsByTagName('datum')[0].firstChild.nodeValue +
'</p>'+
'<table border=1>'+
'<tr>'+
'<th class="thplanklasse">Klasse/Kurs</th>'+
'<th class="thplanstunde">Stunde</th>'+
'<th class="thplanfach">Fach</th>'+
'<th class="thplanlehrer">Lehrer</th>'+
'<th class="thplanraum">Raum</th>'+
'<th class="thplaninfo">Info</th>'+
'</tr>';
for (var i = 0; i <= xml.getElementsByTagName('klasse').length; i++) {
var test = xml.getElementsByTagName('klasse')[i].firstChild.nodeValue;
if (test == klasse) {
tempausgabe = tempausgabe +
'<tr>'+
'<td class="thplanklasse">'+ xml.getElementsByTagName('klasse')[i].firstChild.nodeValue +'</td>'+
'<td class="thplanstunde">'+ xml.getElementsByTagName('stunde')[i].firstChild.nodeValue + '</td>'+
'<td class="thplanfach">'+ xml.getElementsByTagName('fach')[i].firstChild.nodeValue + '</td>'+
'<td class="thplanlehrer">'+ xml.getElementsByTagName('lehrer')[i].firstChild.nodeValue + '</td>'+
'<td class="thplanraum">'+ xml.getElementsByTagName('raum')[i].firstChild.nodeValue + '</td>'+
'<td class="thplaninfo">'+ xml.getElementsByTagName('info')[i].firstChild.nodeValue + '</td>'+
'</tr>';
datenvorhanden=true;
}
}
tempausgabe = tempausgabe + '</table>';
if (datenvorhanden) {
ausgabe = ausgabe + tempausgabe;
} else {
ausgabe = ausgabe + '<span class="vpfuer">Vertretungsplan für <span class="vpfuerdatum">' + xml.getElementsByTagName('titel')[0].firstChild.nodeValue + '</span></span><br>'+
'aktualisiert am '+ xml.getElementsByTagName('datum')[0].firstChild.nodeValue +'<br><br> An diesem Tag hast du keine Vertretung!'; }
} else {
alert('Es gab ein serverseitiges Problem!');
}
}
}
</script>
</head>
<body bgcolor="#ffffff">
<div align="center">
<p>Wähle deine Klasse und deine Vertretung wird angezeigt!</p>
<form name="Klasse">
<select name="Klasse" size="1" onchange="anzeigen()">
<option value="05.1">Klasse 5/1</option>
<option value="05.2">Klasse 5/2</option>
<option value="05.3">Klasse 5/3</option>
<option value="05.4">Klasse 5/4</option>
<option value="05.5">Klasse 5/5</option>
<option value="06.1">Klasse 6/1</option>
<option value="06.2">Klasse 6/2</option>
<option value="06.3">Klasse 6/3</option>
<option value="06.4">Klasse 6/4</option>
<option value="07.1">Klasse 7/1</option>
<option value="07.2">Klasse 7/2</option>
<option value="07.3">Klasse 7/3</option>
<option value="08.1">Klasse 8/1</option>
<option value="08.2">Klasse 8/2</option>
<option value="08.3">Klasse 8/3</option>
<option value="08.4">Klasse 8/4</option>
<option value="09.1">Klasse 9/1</option>
<option value="09.2">Klasse 9/2</option>
<option value="09.3">Klasse 9/3</option>
<option value="09.4">Klasse 9/4</option>
<option value="10.1">Klasse 10/1</option>
<option value="10.2">Klasse 10/2</option>
<option value="10.3">Klasse 10/3</option>
<option value="10.4">Klasse 10/4</option>
</select>
</form>
</div>
<br>
<div id="ausgabe"></div>
</body>
</html>
Aber es gibt neuerdings zwei Fehler: Fehler eins ist, dass immer beim Firebug angezeigt wird:
xml.getElementsByTagName("klasse")[i] has no properties
var test = xml.getElementsByTagName('klasse')[i].firstChild.nodeValue;
Und der zweite Fehler ist, dass gar keine Ausgabe stattfindet! :-(
Wie kann ich das beheben?
Hi!
Aber dann kommt die erste nicht mehr an! Sondern die zweite überschreibt irgendwie die erste!? Zumindest hat es mit dem gleich nacheinander aufrufen nicht geklappt!
Wenn du aus irgendwelchen Gruenden die gleichen Objekte und Variablen nimmst, starte den 2. Request einfach nachdem der erste durch ist.
spontan ist dabei kein Problem erkennbar. Ausser du verstehst das mit dem Asynchronen Javascript nicht. Wissen wir aber nicht. Du darfst es auch gern synchron machen.