|
|||
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(); } 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); } 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 |
Sponsored Links |
Sponsored Links |
|
|||
Zitat:
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. |
|
|||
Zitat:
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> 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> PHP-Code:
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. |
|
||||
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] Geändert von protonenbeschleuniger (02.03.2008 um 09:57 Uhr) |
Themen-Optionen | |
Ansicht | |
|
|
Ä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 |