XML Response mit CGI

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Hallo Zusammen,

ich versuche gerade eine kleine Web Application auf die Beine zu stellen mit "simplem" Python-CGI Skripten. Dazu will ich die Datenkommunikation auf XML basierend entwicklen. Jetzt habe ich an der Stelle ein Problem, bei dem ich mir noch nicht sicher bin ob es im Javascript-Teil oder Python Programm zu beheben ist, hoffe hier kann mir trotzdem jemand helfen: Leider schießt mir der IE wieder alle Pläne über den Haufen, weil ich es einfach nicht hinbekomme ihn dazu zu überreden meine XML Nachricht zu empfangen.

In allen Browsern, ausgenommen dem IE erreiche ich auf Client-Seite die initilisierung eines XML Requests/Response mit der expliziten Angabe des MimeType

Javascript:

Code: Alles auswählen

// >>>> http.overrideMimeType('text/xml');
// Hier mal die "ganze" Funktion
function getRequest() {
	var request;
	try {
		request = new XMLHttpRequest();
	} catch (Error) {
		try {
			request = new ActiveXObject("Microsoft,XMLHTTP");
		} catch (Error) {
			try {
				request = new ActiveXObject("MSXML2.XMLHTTP");
			} catch (Error) {
				try {
					request = new XMLHttpRequest();
				} catch (Error) {
					alert("Es trat ein Fehler beim erzeugen eines Requestobjektes auf.");

				}
			}
		}
	}
	return request;
}



function sendXMLRequest(url) {
	var http = getRequest();
	http.overrideMimeType('text/xml');
	http.open("GET", url, false);
	http.send(null);
	return http.responseXML;
}
Dabei schreibe ich im Python Code die XML Datei ohne ContentType deklaration. Jetzt kennt der IE aber die MimeType funktion (im Javascript) nicht, jetzt habe ich Tante Google gefragt und diese hat mir mitgteilt das ich einfach den Contenttype auf text/xml oder application/xml setzen soll, das ganze sieht dann so aus:

Code: Alles auswählen

def buildReturnData(result):
    
    print "Content-Type: text/xml"
    print

    print '<?xml version="1.0" encoding="UTF-8"?>'
    #>Build XML File

Das Problem ist das ich die Response dann im "ResponseText" bekomme und ich daraus kein XML-Object bekomme.

Mir schwahnt gerade das es eher ein Javascript/HTML Problem ist, aber wie ich euch kenne, wisst ihr da sicher auch Rat :)

Grüße
Dom
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

moiens,

schon einmal mit application/xml als MIME-Type probiert?

gruß, SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

SigMA hat geschrieben:moiens,
schon einmal mit application/xml als MIME-Type probiert?
Das selbe Ergebnis leider, ich habe vorgezogen einen kleinen Workaround auf Javascript Seite geschrieben, aber schön finde ich das auch nicht :)

Code: Alles auswählen

function sendXMLRequest(url)
{
	var http = getRequest();

	if (window.ActiveXObject)
	//  IE
	{
		text=sendContentRequest(url);
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = "false";
		xmlDoc.loadXML(text);
		return xmlDoc

	}
	else
	// NOT IE
	{
		http.overrideMimeType('text/xml');
		http.open("GET", url, false);
		http.send(null);
		return http.responseXML;
	}

}
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Hast du schonmal überlegt json zu nutzen? XML macht die Kommunikation unnötig kompliziert, vor allem wenn es um Javascript und Python geht.

Außerdem dürfte cgi für so etwas schnell zu simpel werden. Ich würde für so etwas werkzeug nutzen oder ein Microframework wie bottle, in diesem Fall könnte webwork allerdings auch interessant sein, hängt aber davon ab wieviel du in Javascript realisieren willst.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Dom!

Wenn du es satt hast, jede Kleinigkeit für mehrere Browser extra zu programmieren, dann könntest du zur Abwechslung ein Framework wie z.B. jQuery ausprobieren.

http://docs.jquery.com/Ajax

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten