zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Seltsames Problem mit XMLHttpRequest

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 01.03.2008, 16:58
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 07.12.2004
Beiträge: 52
yellowfox befindet sich auf einem aufstrebenden Ast
Standard Seltsames Problem mit XMLHttpRequest

Hallo Leute

Ich habe ein Problem, dass mich gestern fast in den Wahnsinn getrieben hat.

Eine Javascript-Funktion "aktualisieren" führt eine zweite Funktion "sendRequest" aus, welche wiederum einen XMLHttpRequest ausführt. Sinngemäss:

Code:
Request = new XMLHttpRequest();

function handleRequest()
     {
          if (Request.readyState == 4)
               {
                    document.getElementById('inhalt').innerHTML = Request.responseText;
               }
     }
											
function sendRequest()
     {												
          Request.open("post", "verarbeitung.php", true);
          Request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');			
          Request.onreadystatechange = handleRequest;
          Request.send("feldwert=" + encodeURIComponent(feldwert));
     }

function aktualisieren()
     {
          sendRequest();
     }
Das heisst vereinfacht, jedesmal, wenn die Funktion aufgerufen wird, wird der Inhalt des Elements "Inhalt" mit aktuellen Daten ersetzt, was auch wunderbar funktioniert. Nun soll eben diese Funktion aber von einem Popup-Fenster aus aufgerufen werden, wenn dort ein bestimmter Link angeklickt wird. Das geschieht über einen Event-Handler:

onclick="opener.aktualisieren()"

Auch das funktioniert noch. Aber ab da wird es seltsam. Sobald die Funktion "aktualisieren" vom Popup aus einmal ausgeführt wurde (das Popup wird danach geschlossen) funktioniert der Request nicht mehr. Bei einem weiteren Aufruf der Funktion "aktualisieren" passiert gar nichts mehr und die Fehler-Konsole von Firefox gibt die folgende sehr kryptische Meldung aus.



Das ganze passiert wie gesagt aber nur, wenn die Funktion "aktualisieren" vom Popup aus über onclick="opener... aufgerufen wird. Davor kann ich die Funktion aufrufen wie ich lustig bin. Ab da geht nichts mehr.

Wirklich spannend ist aber das, was ich nach rund zwei Stunden entdeckt habe. Wenn ich den Aufruf der Funktion "sendRequest" verzögere:
Code:
function aktualisieren()
     {
          setTimeout("sendRequest()", 100);          
     }
... funktioniert es einwandfrei. Dazu reicht bereits eine Verzögerung von einer Tausenstelsekunde.

Nun zur Frage. Kann jemand erkennen, wo das Problem bzw. mein Fehler liegt? Mittlerweile vermute ich ja schon beinahe, dass es ein Bug in Firefox ist (ich kann momentan leider auf keinem anderen Browser testet).

Für Hinweise wäre ich sehr dankbar.

Gruss
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 01.03.2008, 17:51
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

So etwas Ähnliches hatte ich vorhin auch. Der FF hatte sich da irgendwie
verheddert. Obskure Fehlermeldungen die Google nicht kennt.

Ich tippe auf einen Denkfehler ... vielleicht das Problem mal anders angehen.

Ist nicht böse gemeint, nur sitzt das Problem öfter mal vor dem PC ... ich kenn' das
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 01.03.2008, 18:09
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 07.12.2004
Beiträge: 52
yellowfox befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Ich tippe auf einen Denkfehler ... vielleicht das Problem mal anders angehen.

Ist nicht böse gemeint, nur sitzt das Problem öfter mal vor dem PC ... ich kenn' das
Keine Sorge. Darum habe ich auch geschrieben, dass ich beinahe an einen Bug glaube. Die Erfahrung hat mich gelehrt, dass der Bug meisten im Kopf ist

Was mich eben nur irritiert ist, dass es mit dieser künstlichen Verzögerung funktioniert. Dabei scheint es überhaupt keine Rolle zu spielen, wie gross die Verzögerung ist. Das verrückte ist, ich kann sie sogar auf Null setzen und es geht, wie ich gerade festgestellt habe. Nur eben beim direkten Aufruf der Funktion ohne den Umweg über Timout geht es nicht, was irgendwie schon ein bisschen obskur ist.
Mit Zitat antworten
  #4 (permalink)  
Alt 02.03.2008, 00:40
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Du schreibst oben 'sinngemäß', d.h. ich kann mit dem obigen Code den Fehler reproduzieren?
Mit Zitat antworten
  #5 (permalink)  
Alt 02.03.2008, 01:19
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 07.12.2004
Beiträge: 52
yellowfox befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von protonenbeschleuniger Beitrag anzeigen
Du schreibst oben 'sinngemäß', d.h. ich kann mit dem obigen Code den Fehler reproduzieren?
Ja. Der Originalcode ist deutlich länger aber der oben aufgeführte Code entspricht dem Wesentlichen.

Zum Reproduzieren kannst du folgende drei Dateien erstellen:


"test.html" mit folgenden Inhalt:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
	
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

		<title>Test</title>
		
		<script type="text/javascript">
		
			Request = new XMLHttpRequest();

			function handleRequest()
			     {
			          if (Request.readyState == 4)
			               {
			                    alert(Request.responseText);
			               }
			     }

			function sendRequest()
			     {												
			          Request.open("post", "server.php", true);
			          Request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');			
			          Request.onreadystatechange = handleRequest;
			          Request.send(null);
			     }

			function aktualisieren()
			     {
			          sendRequest();
			     }
			
			function popup(url)
				{
					fenster = window.open(url, "Popup-Fenster", "width=400, height=300, resizable=yes");
					fenster.focus();
					return false;
				}
			
		</script>
		
	</head>
	
	<body>
	
		<a href="javascript:aktualisieren()">Aktualisieren</a><br />
		<a href="fenster.html" target="_blank" onclick="return popup(this.href)">Fenster anzeigen</a>
	
	</body>

</html>
"fenster.html" mit folgendem Inhalt:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
	
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

		<title>Fenster</title>
		
	</head>
	
	<body>
	
		<a href="javascript:opener.aktualisieren()">Aktualisieren</a><br />
	
	</body>

</html>
und "server.php" mit folgendem Inhalt:
PHP-Code:
<?
    
die('Okay ');
?>
Die drei Dateien auf den Server laden und die Datei "test.html" aufrufen. Jedesmal, wenn du auf den Link "Aktualisieren" klickst, wird per AJAX die Ausgabe "Okay" aus der Datei "server.php" vom Server geholt und als Alert ausgegeben. Das kannst du beliebig oft machen.

Dann klickst du auf "Fenster anzeigen". Es öffnet sich ein Popup in dem du auch wieder auf den Link "Aktualisieren" klickst. Der Link ruft mit "opener" dieselbe Funktion auf. Das funktioniert auch noch.

Jetzt schliesst du das Popup-Fenster wieder. Ab genau diesem Punkt ist der Link "Aktualisieren" sowohl in der Datei "test.html" also auch im Popup-Fenster tot und die Fehler-Konsole von Firefox gibt die oben genannte Meldung aus.

Ich habe unterdessen noch weiter probiert. Wie bereits gesagt, kommt es nicht zu diesem Fehler, wenn die Funktion "sendRequest" in der Funktion "aktualisieren" über einen Timout läuft - selbst wenn der Timout auf Null gesetzt ist. Weiter habe ich unterdessen entdeckt, dass der Fehler ebenfalls nicht auftritt, wenn man das Popup nicht schliesst. sondern offen behält.

Diese beiden meiner Meinung nach absolut unsinnigen Verhaltensmuster lassen mich zum Schluss kommen, dass es ein Bug in Firefox ist. Untermauert wird das von der Tatsache, dass es z.B. unter Safari einwandfrei funktioniert, wie ich mittlerweile feststellen konnte.
Mit Zitat antworten
  #6 (permalink)  
Alt 02.03.2008, 09:27
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Ich hab den Code von dir 1:1 übernommen und genau das gemacht was du geschriebn hast und erhalte keine Fehlermeldung, funktioniert 1a. (FF 2.0.0.12/WinXP)

[EDIT]OK, seltsam, beim ersten Mal ging es, beim zweiten Mal nicht mehr.

Die Fehlermeldung:
Code:
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.open]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: http://localhost/projekte/Javascript/tmp.html :: sendRequest :: line 26"  data: no]
Wenn du jeweils nur einmal klickst dann tritt das Phänomen auch nicht immer auf.

Geändert von protonenbeschleuniger (02.03.2008 um 09:57 Uhr)
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Text neben Navigationsleiste andi01 CSS 6 08.06.2011 17:54
Mitwachsender Content und Footer Problem Bentham CSS 5 19.09.2010 12:49
IE 7: Zoom Problem, Höhen Problem, Text problem Cu Chullain CSS 4 02.09.2010 14:56
Design zu CSS/HTML verarbeiten - Problem häufen sich. Grafikamateur CSS 2 06.08.2007 10:57
seltsames Design Problem Ben Achatz CSS 2 12.07.2007 14:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:59 Uhr.