ERLEDIGT
NEIN
NEIN
ANTWORTEN
19
19
ZUGRIFFE
4601
4601
EMPFEHLEN
-
Hallo,
Ich möchte eigentlich nur eine simple xml-Datei auslesen über AJAX.
Das gelingt mir soweit auch nur im Internet Explorer kommt ein leeren XML-Dokument an.
Dabei gehe ich wie folgt vor:
Ich rufe mit einer Funtkion die Request-Methode auf:
Code :1 2 3 4
function dbGetFormPlanData(pid) { makeRequest("AJAX/getPlanData.php","fillFormPlanData","plan_id="+pid); }
in der Requestmethode hole ich mir das http-Request-objekt, und weise dem onreadystatechange eine Methode zu die die gesendeten Daten auslesen soll.
Als Parameter poste ich nur eine Id welche im verlinkten php-Script zum auslesen eines Datensatzes benötigt wird:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
function makeRequest(url,method,post) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); // zu dieser Zeile siehe weiter unten } } 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('Ende :( Kann keine XMLHTTP-Instanz erzeugen'); return false; } //dem HTTP_Request eine methode Zuweisen die aufgerufen wird wenn der Request Abgeschlossen ist //addORSCMethod(method); http_request.onreadystatechange = fillFormPlanData; http_request.open('POST', url, true); http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); http_request.send(post); }
Die gewünschte Methode wird auch durch das http-Request aufgerufen und fordert von der Methode getXMLfromRequest das xml-Objekt an.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
function fillFormPlanData() { var xmldoc=getXMLfromRequest(); if(xmldoc!=null) { var row=new Array(); row['vonDate']=xmldoc.getElementsByTagName('vonDate').item(0).firstChild.data; /* .... */ } }
Die Methode getXMLfromRequest liest dann die XML-Daten von dem http-Request-Objekt aus und übergibt sie. Aber schon in dieser Methode hat das XML-Objekt keine einzigen Kindknoten und ist völlig leer - im Internet Explorer. Opera und Firefox haben dies Problem nicht.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
function getXMLfromRequest() { var xmldoc=null; if (http_request.readyState == 4) { if (http_request.status == 200) { xmldoc = http_request.responseXML; //Nach Fehlerausgabe suchen var fehler=xmldoc.getElementsByTagName('fehler'); //Wenn Fehler gefunden if(fehler.length > 0) { //dann ausgeben alert(fehler.item(0).firstChild.data); } } else { alert('Bei der Datenabfrage ist ein Problem aufgetreten.'); } } return xmldoc; }
Den größten Teil des Codes habe ich von:
http://www.w3clubs.com/mozdev/httprequest_test_xml.html
Interessant ist, dass der Code auf deren Seite funktioniert. Kopiere ich ihn aber exakt aus dem Quelltext in meine Javascript-Datei habe ich auch hiermit dasselbe Problem, dass der IE nur ein leeres XML-Dokument ausliest.
Ich bin am verzwiefeln.
-
15.07.07 12:32 #2
Überprüfe mal, ob es geht, wenn du auch exakt die selben Header-Infos der Beispiel-Seite übernimmst.
Versuche sonst mal statt
Code javascript:1
http_request.responseXML
Code javascript:1
http_request.responseXML.xml
Hoffe, das hilft dir
Master of Chess>> Wenn Microsoft die Lösung ist, will ich mein Problem zurück! <<
-
Danke für deine Hilfe.
Leider hat alles nichts gebracht.
Die Header habe ich eins-zu-eins aus dem Quellcode kopiert.
Brachte aber auch keine Änderung. Selbst der exakt kopierte Quellcode will nicht so laufen wie er es soll.
Das von dir empfohlene responseXML.xml habe ich auch ausprobiert. Es wird aber von keinem Browser akzeptiert.
Ich habe sogar den Kopf der HTML-Datei übernommen für die Datei in der das Script gestartet wird.
Trotz alledem weigert sich der IE(7) die xml-Datei auszulesen (zumindest eine sinnvoll gefüllte). Egal ob ich das Skript jetzt auf localhost oder auf dem server im netz starte.HTML-Code:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ...
-
15.07.07 17:24 #4
Du kannst ja zum Test auch nochmal die genutzte test.xml benutzen. Vielleicht liegt's an der XML-Datei?
>> Wenn Microsoft die Lösung ist, will ich mein Problem zurück! <<
-
Hm ja die original xml-Datei akzeptiert er.
Jetzt bin ich so weit, dass ich davon ausgehen kann, dass der IE nur Dateien mit der
Endung .xml akzeptiert.
Spreche ich die php Datei an habe ich wieder das alte Problem.
rufe ich die php-Datei aber im ie direkt auf und speichere den erzeugten xml-code in eine
xml-Datei
dann nimmt der ie(übrigens einer meiner allerliebsten LieblingsbrowserCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?xml version="1.0" ?> <plandata> <plan_id>11</plan_id> <vonDate>2007-07-01</vonDate> <vonTime>08:00:00</vonTime> <bisDate>2007-11-28</bisDate> <dauer>667</dauer> <wtag>7</wtag> <thema_id>6</thema_id> <titel>Nochn Thema</titel> <farbe>16776960</farbe> <beschreib>nochn Thema Themalokuiop</beschreib> </plandata>
) das an.
Jetzt muss ich ihn nur noch dazu bringen, dass er php-Dateien auch ganz toll findet.
-
15.07.07 18:20 #6
Dann sag ihm per PHP doch mit der header()-Funktion dass der Content-Type text/xml ist. Dann müsste es gehen. Also:
btw: Was findest du übrigens am IE gutPHP-Code:header('Content-Type: text/xml');
Schönen Tag noch
Master of ChessGeändert von Master of Chess (15.07.07 um 18:36 Uhr) Grund: Code-Schnipsel ergänzt, *argh* Tippfehler
>> Wenn Microsoft die Lösung ist, will ich mein Problem zurück! <<
-
Danke, das blieb leider auch ohne Erfolg.
Ich habe in der .htaccess jetzt einfach Dateien mit der Endung .xml
als php Dateien eingetragen und die php-Datei in yyy.xml umbenannt. So nimmt der ie das an.
Ist zwar nicht der Königsweg aber funktioniert erst mal.Code :1 2
AddType application/x-httpd-php .php .xml AddHandler x-httpd-php .php .xml
Wenn noch jemand eine einfachere Lösung hat, die auch mit .php-Dateien arbeitet, kann er/sie sich gerne bei mir melden.
-
-
Hi!
Habe das gleiche Problem mit dem verfluchtn IE...
übergebe ich dem IE eine fertige xml-Datei, so funktioniert er, wie ich es von ihm erwarte
(ich nutze für den HttpRequest die XHConn library)
Code :1
myConn.connect("getPlaces.xml", "GET", "IDDistrict="+IDDistrict, fnWhenDone);
übergebe ich ihm aber von PHP generierte xml-Daten, so spielt er nicht mit
Code :1
myConn.connect("getPlaces.php", "GET", "IDDistrict="+IDDistrict, fnWhenDone);
in der getPlaces.php habe ich natürlich den header auf Content-type: text/xml; gesetzt
Die Lösung mit der .htaccess "interpretiere *.xml als *.php!" funktioniert bei mir lieder nicht... Es ist zum verzweifeln!PHP-Code:<?PHP header('Content-type: text/xml; charset=utf-8'); ... ?>
-
03.05.08 11:52 #10
Erstmal herzlich willkommen im Forum!
Ich bin mir nicht sicher, inwieweit das standardkonform ist, aber probier doch mal
Außerdem solltest du darauf achten, dass dein erzeugtes XML-Dokument mitPHP-Code:header('Content-Type: application/xml');
beginnt.HTML-Code:<xml version="1.0" encoding="UTF-8">
Einen schönen Tag noch
Master of Chess>> Wenn Microsoft die Lösung ist, will ich mein Problem zurück! <<
-
Hi Master Of Chess!
Die Idee mit dem application/xml hatte ich auch schon... hat nicht geklappt.
Die XML-Daten sind auch korrekt und sehen in etwa so aus:
Code xml:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?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>
-
03.05.08 13:51 #12
Könntest du evtl. auch noch den entsprechenden Ausschnitt aus deinem JS posten? Das wäre unter Umständen hilfreich. Es ist nämlich auch noch die Frage, ob du den Antworttext direkt alse responseText oder XML verarbeitest...
Schönen Tag noch
Master of Chess>> Wenn Microsoft die Lösung ist, will ich mein Problem zurück! <<
-
Das ganze Skript:
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.
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.HTML-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>
getPlaces.php sieht in etwa so aus:
Die von der getPlaces.php generierten XML-Daten sehen 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;
?>
Code xml:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
function getPlaces(IDDistrict) { var myConn = new XHConn(); var selectPlaces = document.getElementById('selectPlaces'); var fnWhenDone = function(oXML) { var myXML = oXML.[B]responseXML[/B]; 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("[B][COLOR="DarkRed"]getPlaces.php[/COLOR][/B]", "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
dann kann der IE damit umgehen, sprich, der IE erhält dann ein Objekt, dass nicht null ist.Code :1
myConn.connect("[B][COLOR="DarkRed"]getPlaces.xml[/COLOR][/B]", "GET", "IDDistrict="+IDDistrict, fnWhenDone);
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 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...
-
03.05.08 14:42 #14
Hmm... Mit XHConn kenn ich mich jetzt nicht so aus, ich bin eher so für reines JS
Aber wie dem auch sei. Du musst auch beachten, dass das PHP-Skript nicht nur den Header für UTF-8 ausgibt, sondern auch die Daten an sich so kodiert. Probier mal:
Schönen Tag nochPHP-Code:echo utf8_encode($optionPlaces);
Master of Chess>> Wenn Microsoft die Lösung ist, will ich mein Problem zurück! <<
-
Das habe ich zwar nicht ganz verstanden, habs aber trotzdem mal ausprobiert... ohne Erfolg.
die ursprüngliche Datei getPlaces.php?IDDistrict=20
die neue Datei getPlaces_echo_utf8_encode.php?IDDistrict=20PHP-Code:<?PHP
header('Content-type: text/xml; charset=utf-8');
/* */
echo $optionPlaces;
?>
Der Witz ist, dass der IE bei direktem Aufruf dieser Seiten sie durchaus als xml-Dateien sieht. Nur wenn er sie über AJAX parsen soll, nimmt er sie nicht anPHP-Code:<?PHP
header('Content-type: text/xml; charset=utf-8');
/* */
echo utf8_encode($optionPlaces);
?>
Ähnliche Themen
-
JAXB - leeres Dokument beim unmarshalling
Von nail im Forum Java GrundlagenAntworten: 0Letzter Beitrag: 05.12.09, 13:45 -
Eigenschaft gibt NULL zurück
Von Briefkasten im Forum PHPAntworten: 2Letzter Beitrag: 31.12.06, 13:20 -
Funktion gibt nix zurück
Von Soapp im Forum PHPAntworten: 6Letzter Beitrag: 18.09.06, 19:02 -
Leeres Word-Dokument
Von LordDeath im Forum .NET DatenverwaltungAntworten: 0Letzter Beitrag: 14.06.06, 13:33 -
date gibt Blödsinn zurück ?
Von BeaTBoxX im Forum PHPAntworten: 5Letzter Beitrag: 30.03.05, 14:26





Zitieren
Login





