AJAX Request -> Browser hängt sich auf
kabu
- javascript
Hallo zusammen,
Geht um ein lokales Projekt mit XAMPP 1.7.1 (Apache 2.2.11, MySQL 5.1.33, PHP 5.2.9), prototype 1.6.0.3.
ich habe da ein kleines Problem mit AJAX Requests.
So läuft alles wunderbar, aber wenn ein Request gerade im Gange ist, und ich einen Seitenrefresh mache, bzw die Seite wechseln möchte, hängt sich der Request auf und nichts geht mehr. Auch wenn der Request sein Timeout erreicht hat, ändert sich nichts. Muss dann erst den Apache restarten, damit ich wieder auf den localhost zugreifen kann. Hab auch schon so gesucht, aber nichts gefunden. Kann es zur Zeit auch nicht auf einem Server testen, möchte aber wissen, ob ich jetzt irgendwas falsch mache (gibt es da irgendetwas zu beachten?) oder ob es evtl. am XAMPP liegt.
MFG
kabu
Hallo,
ich habe da ein kleines Problem mit AJAX Requests.
So läuft alles wunderbar, aber wenn ein Request gerade im Gange ist, und ich einen Seitenrefresh mache, bzw die Seite wechseln möchte, hängt sich der Request auf und nichts geht mehr.
das hatten wir doch neulich erst ...
So long,
Martin
Grüße,
das hatten wir doch neulich erst ...
da der Fragesteller im letzten posting das fragt, was in den 5 davor erklärt wurde, könnte es ein schlechtes Beispiel sein, oder?
MFG
bleicher
das hatten wir doch neulich erst
In diesem Thread sehe ich keine Lösung für mein Problem. Kannst du mir da etwas auf die Sprünge helfen?
Hallo,
das hatten wir doch neulich erst
In diesem Thread sehe ich keine Lösung für mein Problem.
ähm, sorry. Ich habe deinen Beitrag nur kurz überflogen und mich erinnert, dass vor ein paar Tagen eine ganz ähnliche Frage aufkam. Ich habe nur den Thread aus dem Archiv rausgesucht, aber nicht weiter durchgelesen.
Kannst du mir da etwas auf die Sprünge helfen?
Leider nein. Ich finde das Verhalten von Browser und Server, das du beschreibst, sehr eigenartig.
Vordergründig ist klar: Ein AJAX-Request wird vom Server bearbeitet, braucht aber einen kleinen Augenblick, bis die Antwort an den Client verschickt wird. Fordert der Nutzer in dieser kurzen Zeitspanne einen Seiten-Refresh an, gibt der Browser alle noch ausstehenden Transfers auf und kümmert sich nicht mehr drum.
Dass dabei der Browser hängt (welcher übrigens?), ist für mich nicht logisch nachvollziehbar. Ebensowenig, dass der Server hängt, denn er sollte eigentlich die für diesen Request gestarteten Prozesse entsorgen, wenn die zum HTTP-Transfer gehörende TCP/IP-Verbindung vom Client gekappt wird.
Ergo: Ich verstehe zwar, was du uns beschreibst, kann es mir (oder dir) aber nicht erklären.
So long,
Martin
Also Browser habe ich FF 2.xx und IE7 probiert. Bei beiden dasselbe. Ab und an klappt der Seitenwechsel und dann mal wieder nicht. Ich kann es mir nicht erklären. Eigentlich müssten, wie du schon sagtest, die einzelnen Requests gekickt werden, aber die laufen ruhig weiter, bis der Timeout zuschlägt. Zudem aborte ich alle offenen Requests bei einem Unload, was ja ein Seitenwechsel zwangsläufig nach sich zieht. Irgendwo muss da ja was schiefgehen. Ich vermute mal das es am XAMPP liegt, aber solange ich es nicht auf einer "richtigen" Serverumgebung testen kann, bin ich auf den localhost angewiesen.
Ich bekomme hier noch ne Krise.
Grüße,
schmeiß Opera dazu, Firefly bietet dir ein Paar werkzeuge zum genauen untersuchen der AJAXrequests - inclusive Zeitablauf
(theoretisch hat FF auch was zu - aber genaueres müsstest du googeln)
MFG
bleicher
Habs mir jetzt mal mit Tamper Data angeschaut und die Requests stehen auf pending. Und nun?
ich habe da ein kleines Problem mit AJAX Requests.
So läuft alles wunderbar, aber wenn ein Request gerade im Gange ist, und ich einen Seitenrefresh mache, bzw die Seite wechseln möchte, hängt sich der Request auf und nichts geht mehr. Auch wenn der Request sein Timeout erreicht hat, ändert sich nichts. Muss dann erst den Apache restarten, damit ich wieder auf den localhost zugreifen kann.
Das klingt mir weniger nach einem Problem mt AJAX, als nach einem Problem des Serverseitigen Skripts.
Struppi.
Das klingt mir weniger nach einem Problem mt AJAX, als nach einem Problem des Serverseitigen Skripts.
Ich verstehe nicht ganz was du meinst. Du meinst das PHP Skript auf das der Request zugreift, ist fehlerhaft?
Das klingt mir weniger nach einem Problem mt AJAX, als nach einem Problem des Serverseitigen Skripts.
Ich verstehe nicht ganz was du meinst. Du meinst das PHP Skript auf das der Request zugreift, ist fehlerhaft?
Naja, wenn dein Server einfriert, was soll denn sonst daran Schuld sein, wenn nicht das Skript auf dem Server?
Struppi.
Naja, wenn dein Server einfriert, was soll denn sonst daran Schuld sein, wenn nicht das Skript auf dem Server?
Wenn das Skript fehlerhaft wäre, würde der Request nicht die gewünschten Resultate bringen. Zudem wirft das PHP Skript keinerlei Fehler oder Warnungen und die Seite ist valide.
Naja, wenn dein Server einfriert, was soll denn sonst daran Schuld sein, wenn nicht das Skript auf dem Server?
Wenn das Skript fehlerhaft wäre, würde der Request nicht die gewünschten Resultate bringen.
Deine Beschreibung sagt was anderes:
... und ich einen Seitenrefresh mache, bzw die Seite wechseln möchte, hängt sich der Request auf und nichts geht mehr. Auch wenn der Request sein Timeout erreicht hat, ändert sich nichts. Muss dann erst den Apache restarten, damit ich wieder auf den localhost zugreifen kann.
Das Skript bringt den Server zum Absturz, also muss es fehlerhaft sein.
Struppi.
Das Skript bringt den Server zum Absturz, also muss es fehlerhaft sein.
Dann würde dies schon beim ersten Request der Fall sein, und nicht per "Zufall" nur weil der Seitenwechsel/Refresh schlecht getimed ist. Der Request wird zum Server geschickt, erhält aber keine Response mehr, soll heißen er hat den Status pending. Und eigentlich sollte der Request ja in den Müll wandern, macht er aber nicht. Der "GarbageCollector" des Servers kommt da irgendwie nicht seiner Aufgabe nach. Keine Ahnung wie ich es sonst noch beschreiben soll.
Das Skript bringt den Server zum Absturz, also muss es fehlerhaft sein.
Dann würde dies schon beim ersten Request der Fall sein, ...
Na gut, wenn du meinst. wir können das ja nicht prüfen. Es war halt nur ein Vorschlag.
Struppi.
Na gut, wenn du meinst. wir können das ja nicht prüfen. Es war halt nur ein Vorschlag.
Vielleicht hilft das ja weiter - hier mal die Header:
funktionierender Request:
0:49:47.354[406ms][total 406ms] Status: 200[OK]
GET http://localhost/test.php?action=get&id=1354 Load Flags[LOAD_BACKGROUND ] Größe des Inhalts[0] Mime Type[text/html]
Request Header:
Host[localhost]
User-Agent[Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729)]
Accept[text/javascript, text/html, application/xml, text/xml, */*]
Accept-Language[de-de,de;q=0.8,en-us;q=0.5,en;q=0.3]
Accept-Encoding[gzip,deflate]
Accept-Charset[ISO-8859-1,utf-8;q=0.7,*;q=0.7]
Keep-Alive[300]
Connection[keep-alive]
X-Requested-With[XMLHttpRequest]
X-Prototype-Version[1.6.0.3]
Referer[http://localhost/]
PHPSESSID=4c9fd4e5b431c55c5675355ca8e04924]
Response Header:
Date[Tue, 22 Sep 2009 22:49:47 GMT]
Server[Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9]
X-Powered-By[PHP/5.2.9]
Expires[Wed, 23 Sep 2009 00:49:47 GMT]
Cache-Control[no-cache, must-revalidate, post-check=0, pre-check=0]
Pragma[No-cache]
Vary[Accept-Encoding]
Last-Modified[Tue, 22 Sep 2009 22:49:47 GMT]
Content-Length[0]
Keep-Alive[timeout=5, max=100]
Connection[Keep-Alive]
Content-Type[text/html; charset=UTF-8]
pending Request
0:50:44.010[0ms][total 0ms] Status: pending[]
GET http://localhost/test.php?action=get&id=1354 Load Flags[LOAD_BACKGROUND ] Größe des Inhalts[unknown] Mime Type[unknown]
Request Header:
Host[localhost]
User-Agent[Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729)]
Accept[text/javascript, text/html, application/xml, text/xml, */*]
Accept-Language[de-de,de;q=0.8,en-us;q=0.5,en;q=0.3]
Accept-Encoding[gzip,deflate]
Accept-Charset[ISO-8859-1,utf-8;q=0.7,*;q=0.7]
Keep-Alive[300]
Connection[keep-alive]
X-Requested-With[XMLHttpRequest]
X-Prototype-Version[1.6.0.3]
Referer[http://localhost/]
PHPSESSID=4c9fd4e5b431c55c5675355ca8e04924]