Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 03.05.2008, 13:47
esviko esviko ist offline
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2008
Beiträge: 5
esviko befindet sich auf einem aufstrebenden Ast
Standard

Die Idee:
im 1. select-Feld wähle ich eine Kreistadt. Der Inhalt des 2. select-Feldes wird durch die Wahl des 1. Feldes bestimmt. Hier kommen die zu der Kreisstadt gehörenden Orte rein. Den Job soll AJAX (XHConn library) mit Unterstützung von PHP und MySQL erledigen.

Code:
<!-- 1. select-Feld - enthält die Kreisstädte -->
<select name="district" size="1" onchange="getPlaces(this.value)">
	<option value="2">Höxter</option>
	<option value="20">Paderborn</option>
	<option value="24">Lippe</option>
</select>

<!-- 2. select-Feld - wird von AJAX/PHP generiert bei Auswahl einer Kreisstadt -->
<select id="selectPlaces" name="place" size="1">
	<option> </option>
</select>
Die JavaScriptFunktion 'getPlaces()' übergibt per 'GET' die ID des Kreises an die getPlaces.php, die wiederum durch eine SQL-Abfrage XML-Daten generiert und diese an die 'getPlaces()' zurückgibt. Die XML-Daten werden per JavaScript geparst und in die HTML-Struktur eingebunden.

getPlaces.php sieht in etwa so aus:
PHP-Code:
<?PHP
header
('Content-type: text/xml; charset=utf-8');

/* SQL-Abfrage... speichert das Ergebnis in der $optionPlaces */

print $optionPlaces;
?>
Die von der getPlaces.php generierten XML-Daten sehen in etwa so aus:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<places>
	<place>
		<placeName>Höxter</placeName>
		<placeID>21</placeID>
	</place>
	<place>
		<placeName>Brakel</placeName>
		<placeID>22</placeID>
	</place>
	<place>
		<placeName>Bad Driburg</placeName>
		<placeID>23</placeID>
	</place>
</places>
die 'getPlaces()' sieht so aus:
Code:
function getPlaces(IDDistrict) {
	var myConn = new XHConn();
	var selectPlaces = document.getElementById('selectPlaces');

	var fnWhenDone = function(oXML) {
		var myXML = oXML.responseXML;
		
		for(i=0; i<myXML.getElementsByTagName('place').length; i++){


			var place = myXML.getElementsByTagName('place')[i];
			var placeName = place.getElementsByTagName('placeName')[0].firstChild.data;
			var placeID = place.getElementsByTagName('placeID')[0].firstChild.data;

			var newOPTIONText = document.createTextNode(placeName);
			var newOPTION = document.createElement("option");
			
			selectPlaces.appendChild(newOPTION);
			newOPTION.setAttribute('value', placeID);
			newOPTION.appendChild(newOPTIONText);	
		}
	}
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	myConn.connect("getPlaces.php", "GET", "IDDistrict="+IDDistrict, fnWhenDone);
}
Der Witz ist nun folgender...
Wenn ich die XML-Daten nicht von der getPlaces.php generieren lasse, sondern der getPlaces() eine fertige XML-Datei übergebe
Code:
myConn.connect("getPlaces.xml", "GET", "IDDistrict="+IDDistrict, fnWhenDone);
dann kann der IE damit umgehen, sprich, der IE erhält dann ein Objekt, dass nicht null ist.

Meine Vermutung ist, dass der IE Dateien, die keine xml-Endung haben, schlicht und ergreifend nicht als xml-Dateien behandeln will... selbst wenn der Webserver ihm über den Header mitteilt, dass es sich um XML-Daten handelt.

Habe auch versucht, die getPlaces.php (in der die XML-Daten generiert werden) in getPlaces.xml umzubenennen, und dann dem Server über .htaccess mitzuteilen, dass er doch bitte xml-Dateien wie php-Dateien behandeln soll. Aber da macht anscheinend mein Provider nicht mit...

Geändert von esviko (03.05.2008 um 15:40 Uhr) Grund: Ergänzung
Mit Zitat antworten