Antworten auf deine Fragen:
Neues Thema erstellen

readystate 4 im Firefox

bad2be

Aktives Mitglied

Grüss Euch
Muss mich seit Ewigkeiten mal wieder mit JS / Ajax beschäftigen und merke warum ich es nie wirklich gemocht habe^^
Vorne weg: Sollte dieses Thema hier schon durch sein bitte ich um entschuldigung, meine Forensuche hat nichts zurückgegeben. Auch das Durchforsten von gefühlten 3000 google Ergebnissen hat nichts geholfen.

Also. In einer Anwendung (Code unten) erreicht mein Firefox den readyState==4 nie. Im Opera und im IE funktionierts.
Btw. der innerHTML Schnipsel ist auch nur zu Testzwecken.

Hab den Code jetzt so weit wie mgl. runtergebrochen, sind aber leider immer noch 60 Zeilen:
Code:
<html>
<head>
    <title>Readystate im Firefox</title>
    <script type="text/javascript">
	var xmlHttp;
	function postRequest(para1,para2,para3)
	{
		xmlHttp = false;
		xmlHttp=GetXmlHttpObject()
		if (xmlHttp.overrideMimeType) { 
			xmlHttp.overrideMimeType('text/xml; charset=utf-8'); 
		} 
		if (xmlHttp==null){
			alert ("Browser does not support HTTP Request");
			return;
		}
		var url="requestPage.php";
		url=url+"?getpara1=wert1";
		var parameters = "email=";
		xmlHttp.onreadystatechange=goToPost;
		xmlHttp.open("POST",url,true);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", parameters.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(null);
	}
	function goToPost()
	{
		if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
			document.getElementById("hierRein").innerHTML=xmlHttp.responseText;
			alert("readystate 4 erreicht Rueckgabe des Files:"+xmlHttp.responseText);
		}else{
			alert("readystate 4 nicht erreicht ");
		}
	}
	function GetXmlHttpObject()
	{
		var xmlHttp=null;
		try{
			// Firefox, Opera 8.0+, Safari
			xmlHttp=new XMLHttpRequest();
		}
		catch (e){
			// Internet Explorer
			try{
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		return xmlHttp;
	}
	postRequest(1,2,3);
    </script>
</head>
<body>
<div id="hierRein"></div>
</body>
</html>
Hat jemand vielleicht spontan ne Idee wie ich das auch im FF zum laufen bekomme? Offenbar scheint es einen Bug im FF was das Readystate handling angeht zu geben, leider war google auch hier nicht wirklich hilfreich.

Edit: Achja, Firefox Version 2.0.0.2
Und: Laut Firbug erhalte ich nach all den alerts auch eine Antwort auf den Request, leider greift der handler dann aber nicht mehr. Hab schon überlegt nen Timer mit einzubaun, aber es muss doch was saubereres geben.

Lieben Dank im voraus

B2B
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: readystate 4 im Firefox

Hi,

soweit ich sehe, ist dein readyState in der function goToPost() enthalten.
Wo wird diese Funktion den ausgeführt - zumindest sehe ich sie nicht in dem von dir gesendeten Quellcode?
 

bad2be

Aktives Mitglied

AW: readystate 4 im Firefox

Hi,

soweit ich sehe, ist dein readyState in der function goToPost() enthalten.
Wo wird diese Funktion den ausgeführt - zumindest sehe ich sie nicht in dem von dir gesendeten Quellcode?

Grüss Dich
Erstmal vielen Dank für Deine Mühen.
Die Funktion wird etwa in der Mitte des Codes aufgerufen:
Code:
xmlHttp.onreadystatechange=goToPost;

Hatte aber auch schon versucht den Readystate direkt einzuwrappen. Al la:
Code:
xmlHttp.onreadystatechange = function(){

}

Geht aber leider auch net. Vor allem verstehe ich nicht, das er den readystate 3 mehrmals aufruft... unter readystatechange verstehe ich, dass er den handler ruft wenn sich was ändert (deswegen CHANGE).

LG B2B
 

saila

Moderatorle

AW: readystate 4 im Firefox

Ah - ok. Hast du schon mal einen alert in die Function goToPost gesetzt um zu prüfen, ob er im Firefox überhaupt dort ankommt?

Edit:
Und sollte diese Zeile:
Code:
url=url+"?getpara1=wert1";
nicht so lauten:
Code:
url=url+"?get"+para1+"=wert1";
?
 
Zuletzt bearbeitet:

bad2be

Aktives Mitglied

AW: readystate 4 im Firefox

Ah - ok. Hast du schon mal einen alert in die Function goToPost gesetzt um zu prüfen, ob er im Firefox überhaupt dort ankommt?

Edit:
Und sollte diese Zeile:
Code:
url=url+"?getpara1=wert1";
nicht so lauten:
Code:
url=url+"?get"+para1+"=wert1";
?

ZU 1: Ja, er kommt soweit. Er gibt auch die Readystate- Meldungen aus. 2 mal "readystate 4 nicht erreicht " einmal readystate 1 und einmal readystate 3.

Zu 2: Joar, der Fehler ist durchs zusammenfassen so gekommen. Die URL ist aber zunächst mal irrelevant, solange ein tatsächlich existenter file aufgerufen wird. Ob jetzt die Get Parameter hardgecodet sind oder an die Methode übergeben werden macht da keinen Unterschied.

Wie gesagt, nachdem er eben keinen state 4 erreicht empfängt firefox laut firebug auch ganz brav eine korrekte Antwort. Nur wird eben der Ereignishandler dann nicht mehr aufgerufen. Bin ja echt knapp davor da nen Timer dazwischen zu kleben, aber das kann doch nicht der Weisheit letzter Schluss sein. Und ich hab immer gedacht solche Spässchen kann nur der IE :p

LG B2B


Edit:

Rofl, jetzt wirds wild. Ich dachte mir ich prüf mal im der goToPost ab ob schon ein responseText da ist.

Code:
function goToPost()
	{
		if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
			document.getElementById("hierRein").innerHTML=xmlHttp.responseText;
			alert("readystate 4 erreicht Rueckgabe des Files:"+xmlHttp.responseText);
		}else{
			alert("readystate 4 nicht erreicht "+xmlHttp.readyState);
		}
		if(xmlHttp.responseText){
			alert("hab den Text"+xmlHttp.responseText);
			document.getElementById("hierRein").innerHTML=xmlHttp.responseText;
		}
	}

Klappt auch im Firefox. Jetzt hab ich nur Angst, dass er eventuell schon zuschlägt wenn der ResponseText noch nicht vollständig ist.
Aber wie gesagt, die Abgeänderte Methode funktioniert in IE, FF, Opera und Safari. Nur ob es die Endgültige Lösung ist wage ich zu bezweifeln.
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: readystate 4 im Firefox

Hi,

ich bin irgendwie zu müde. Aber ich hatte hier noch was gelesen. Evtl. hilft dir das noch etwas weiter: (wenn es nicht schon von dir ist) :)
 

bad2be

Aktives Mitglied

AW: readystate 4 im Firefox

Hehe
Saila, das kann ich verstehn. Leider bin ich über den Link von Dir schon vor einigen Tagen gestolpert, wirklich geholfen hat er aber leider auch nicht. Wie gesagt, ich glaub ich hab in allen google- Suchvarianten jeweils mindestens die ersten 5 Seiten durch.
Was meine Befürchtung angeht: Der ResponseText scheint vollständig, das ResponseXML (worauf es eigentlich hin sollte) ist aber leider unvollständig.
Jetzt wünsch ich Dir aber erst mal ne gute Nacht und vielen Dank für die Hilfe!

LG B2B


Edit:
Hm, ich glaube ich hab den faulen Zahn gefunden. Scheint als hätte sich FF wohl das falsche XmlHttp Objekt rausgepickt.
Ich hoffe mal, dass es das war, aber im Moment sieht es ganz gut aus.
Momentan sieht das so aus (immer noch weit weg jeglichen Errorhandlings, aber es läuft):

Code:
<html>
<head>
    <title>Nur ein Test</title>
    <script type="text/javascript">
	var xmlHttp;
	function makeRequest(paraString)
	{
		xmlHttp = false;
		xmlHttp=GetXmlHttpObject()
		if (xmlHttp.overrideMimeType) { 
			xmlHttp.overrideMimeType('text/xml; charset=utf-8'); 
		} 
		if (xmlHttp==null){
			alert ("Browser does not support HTTP Request");
			return;
		}
		var url="requestpage.php";
		url=url+"?section=1";
		var parameters = paraString;
		xmlHttp.open("POST",url,true);
		xmlHttp.onreadystatechange=awaitAnswer;
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", parameters.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(parameters);
	}
	function awaitAnswer()
	{
		if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
			strContent = xmlHttp.responseXML.getElementsByTagName("htmlcontent"); 
			var tabContent = strContent[0].firstChild.nodeValue;
			document.getElementById("divresult").innerHTML=tabContent;
			alert(tabContent);
		}else{
			//hier ne freaky Fehlermeldung einbaun, state 4 geht nicht
		}
	}
	function GetXmlHttpObject()
	{
		var http;
		if (window.XMLHttpRequest){
			http = new XMLHttpRequest();
			return http;
		}
		else if (window.ActiveXObject)
		{
			 var avers = ["Microsoft.XmlHttp", "MSXML2.XmlHttp", "MSXML2.XmlHttp.3.0",  "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.5.0"];
                    for (var i = avers.length -1; i >= 0; i--) {
                          try {httpObj = new ActiveXObject(avers[i]);
                                return httpObj;
                          } catch(e) {
						  }
                    }
		}
	}
    </script>
</head>
<body onload="makeRequest('foo');">
<div id="divresult"></div>
</body>
</html>


Ist jetzt zwar schon auf responseXML geeicht, funktioniert mit responseText aber genauso.
Vielen lieben Dank für die Hilfe,
*saila ein Feierabendbier zukommen lass*


LG B2B
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben