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