jQuery Ajax schlägt *manchmal* (ERR_EMPTY_RESPONSE) in Chrome und Safari fehl

Lesezeit: 5 Minuten

Benutzer-Avatar
Johann Palmfjord

Ich habe ein Formular, das über jQuery Ajax gesendet wird und plötzlich aus heiterem Himmel fehlschlägt etwas Anfragen in Chrome und Safari unter OS X. Ich habe Firefox, Opera und iOS Safari getestet und sie scheinen alle einwandfrei zu funktionieren (allerdings kann ich nicht sagen, dass ich mir dessen zu 100 % sicher bin, da der Fehler zufällig auftritt, aber ich habe ~ 10 Anfragen ausprobiert in jedem Browser ohne Fehler).

Chrome sagt POST http://<site url>/wp-admin/admin-ajax.php net::ERR_EMPTY_RESPONSE in der Konsole und das Protokollieren des Antwortobjekts in der Konsole gibt mir Object {readyState: 0, responseText: "", status: 0, statusText: "error"} wenn die Anfrage fehlschlägt, nicht sehr hilfreich.

Jedoch Das vollständige PHP-Skript wird ausgeführt, unabhängig davon, ob die Antwort sagt, dass es fehlgeschlagen oder erfolgreich war. Ich weiß das, weil die E-Mails, die über das Formular gesendet werden, immer zugestellt werden. Auch beim Protokollieren aller eingehenden Anfrage-Header in PHP gibt es keinen Unterschied zwischen den fehlgeschlagenen Anfragen und den erfolgreichen.

Ich habe auch die Antworten mit bash überprüft $ curl ... und kann keine Unterschiede zwischen den Antworten feststellen, auch wenn ich den Befehl verwende, den man aus dem Netzwerk-Tab von Chrome kopieren kann (Rechtsklick auf Anfrage > Als cURL kopieren).

Wenn ich eines der Felder (“Telefon”) auslasse, scheint der Fehler zu verschwinden. Aber wenn ich ein paar Mal auf den Absenden-Button klicke, ist die Anfrage schließlich erfolgreich (nach ca. 2-5 Absenden) – obwohl “Telefon” ausgefüllt ist, sind die Formulardaten bei allen Anfragen identisch.

Es gibt keinen Unterschied in der Antwortzeit zwischen fehlgeschlagenen und nachfolgenden Anfragen. (dh ich habe gerade 1,11 Sekunden bei einem Fehlschlag und 1,16 Sekunden bei einem Erfolg).

Für die Übermittlung verwendeter Code: (this.onSuccess und this.onError protokolliert derzeit nur die Anfrageergebnisse)

$.ajax('<url>', {
    action: '<url>',
    method: 'POST',
    data: data, // Serialized form
    success: $.proxy(this.onSuccess, this), // currently just console_logs the response object
    error: $.proxy(this.onError, this), // currently just console_logs the response object
    always: $.proxy(this.always, this)
});

Außerdem habe ich etwas über Zeitüberschreitungen und Probleme mit dem Cachen in Chrome gefunden, also habe ich versucht, es ohne Änderung zu ändern:

$.ajax('<url>', {
    action: '<url>',
    timeout:9999,
    async:true,
    cache:false,
    method: 'POST',
    data: data, // Serialized form
    success: $.proxy(this.onSuccess, this), // currently just console_logs the response object
    error: $.proxy(this.onError, this), // currently just console_logs the response object
    always: $.proxy(this.always, this)
});

Form sieht so aus (aber mit viel Styling-Fuzz):

<form action="#ww_main" class="ajax-form">
    <input type="text" data-min-length="3" name="main[name]" id="name" required="">
    <input type="email" name="main[email]" id="email" required="">
    <input type="tel" name="main[phone]" id="phone">
    <textarea name="main[message]" data-min-length="5" id="message" required=""></textarea>
    <button type="submit">Skicka</button>
</form>

Hat jemand eine Ahnung, woran das liegen könnte? Oder kann mir zumindest einen Tipp geben, wie ich weiter vorgehen soll? Mir gehen jetzt die Ideen aus…

Danke im Voraus!

Aktualisieren

Safari funktioniert plötzlich gut … Nur Chrome, das Probleme hat. Habe keine Änderungen am Code vorgenommen, es hat einfach auf magische Weise angefangen zu arbeiten.

Ps Ich weiß natürlich, dass es sehr unwahrscheinlich ist, dass Dinge “zufällig” passieren und dass die Fehlerbehebung höchstwahrscheinlich nicht systematisch genug durchgeführt wurde, wenn es so scheint, aber in diesem Fall scheinen die Fehler wirklich zufällig zu erscheinen.

  • Der Fehler scheint darauf hinzudeuten, dass der Fehler beim Server liegt, der die Anfrage empfängt, nicht bei Javascript.

    – Rory McCrossan

    29. September 2015 um 9:32 Uhr

  • ^ Es gibt buchstäblich keinen Unterschied in der Antwort zwischen fehlgeschlagenen und erfolgreichen Antworten, nicht einmal die Antwortzeit. Ich sehe nicht, wie es ein serverseitiger Fehler sein kann, wenn die Antworten des Servers identisch sind. Außerdem behandelt es Anfragen nicht unterschiedlich zwischen Browsern, so scheint es mir sehr unwahrscheinlich, dass das der Fall ist.

    – Johan Palmfjord

    29. September 2015 um 9:37 Uhr

  • Wie wird der Ajax-Aufruf aufgerufen?

    – escarello

    25. Mai 2016 um 12:18 Uhr

Dies wurde behoben, als wir von PHP 5.4 auf 5.6 aktualisiert haben – irgendwo scheint es eine Art Fehler in PHP zu geben. Hoffe es hilft jemandem!

  • Ich bin auf 5.6 und habe das gleiche Problem 🙂 was solls 🙂

    – Zugoase

    6. März 2018 um 12:51 Uhr

FYI: Am Ende habe ich mich darum gekümmert und überprüft, ob das Antwortobjekt mit diesem Fehler übereinstimmt und die ausgelöst hat onSuccess wann dieser Fehler gefunden wurde. Uuuuugly, aber es hat funktioniert.

Sie sollten versuchen, memory_limit in der php.ini-Datei des Servers zu erhöhen oder es zumindest zum Testen sogar zu deaktivieren.

  • Im Fehlerprotokoll sind keine Fehler. Danke für die Antwort, aber würde dort nicht ein memory_limit-bezogenes Problem auftauchen? Und eine 500-Antwort/Teilantwort geben? Außerdem tritt das Problem nur in Chrome auf, und manchmal tritt das Problem auf, wenn genau die gleichen Daten übermittelt wurden, als wenn es kein Problem gab. Ich denke wirklich, dass dies ein browserbezogenes Problem ist.

    – Johan Palmfjord

    15. März 2016 um 11:11 Uhr

  • Du hast vermutlich recht. Aber die Sache ist, dass ich ERR_EMPTY_RESPONSE erhalten habe, als ich versuchte, eine große Datei hochzuladen. Aber nachdem ich einige Dinge ausprobiert hatte, deaktivierte ich memory_limit und der Fehler verschwand. Ich habe Ihre Frage tatsächlich gefunden, als ich versuchte, eine Lösung für mein Problem zu finden. Also dachte ich, es wäre am besten, Sie zumindest darüber zu informieren.

    – Hasan Wajahat

    16. März 2016 um 1:05 Uhr

  • Interessant … Hoffentlich hilft es jemandem, ein ähnliches Problem wie Ihres zu lösen, danke für den Beitrag!

    – Johan Palmfjord

    17. März 2016 um 7:05 Uhr

1205580cookie-checkjQuery Ajax schlägt *manchmal* (ERR_EMPTY_RESPONSE) in Chrome und Safari fehl

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy