2016-05-17 7 views
0

Ausführen eines Apache-Servers mit PHP 5.4.Wird ein POST XHR zuverlässig abgebrochen?

Ich habe ein Formular, das eine xhr-Anfrage an den Server sendet und frühere Anfragen abbricht, wenn die Taste erneut gedrückt wird, bevor die aktuelle xhr beendet ist.

Also, wenn ich dort sitze, so schnell wie möglich auf die Schaltfläche klicken (innerhalb von etwa 100-150ms) und zu sehen, all die annullierten XHR in meinem Netzwerk Registerkarte häuft sie und lassen Sie dann die letzte Anfrage tatsächlich beenden, überprüfe ich die Server und stellen Sie fest, dass alle abgebrochenen Anforderungen ihre Aufgabe auf dem Server tatsächlich "abgeschlossen" haben (stellt eine Verbindung zu einer Datenbank her und verwirft einige Daten in einer Tabelle).

Kann auch relevant sein: Nach der "Arbeit" (dem Einfügen in die Datenbank) passiert nur das Senden einer Statuszeichenfolge an den Client.

Ich lese, dass Sie nicht auf HTTP-Anfragen abbrechen sollten, um den Serverprozess tatsächlich abzubrechen, aber hier riecht etwas faul.

Ist es zuverlässig, XHR-Anfragen zu stornieren oder läuft etwas mit meinem Server?

+0

http://php.net/manual/en/function.ignore-user-abort.php – PeeHaa

+3

Die Abbruchmethode XMLHttpRequest ist in Ordnung, aber wenn die Anfrage bereits an den Server gesendet wurde, wird der Server die Anfrage sogar verarbeiten wenn wir die Anfrage abbrechen. Der Client wartet nicht auf die Antwort. –

Antwort

0

XMLHttpRequest abort wird nur verwendet, um zu verhindern, dass die Benutzeroberfläche gehalten wird, aber die Serveranforderung wird nicht abgebrochen.

Also die Antwort? Es ist unzuverlässig für den Server.

Wenn Sie mehrere Anfragen gleichzeitig verhindern möchten, können Sie entweder 1) Server Side Queuing oder 2) eine einfache Deaktivierung der Aktionsschaltfläche verwenden, während die Anfrage läuft (die Schaltfläche wird erst wieder aktiviert, wenn die Anfrage abgeschlossen ist). Ich würde sagen, Letzteres ist einfacher.

0

HTTP ist ein zustandsloses Protokoll. Wenn Sie Ihre POST vom Client abbrechen, hält es nur den Client auf eine Antwort warten, aber die POST wurde bereits an den Server gesendet. Wenn der Server die Anfrage erhält, wartet er nicht darauf und wartet auf eine weitere Anfrage. es führt einfach die Aktion aus, die mit einer POST Anfrage an die gegebene Ressource verbunden ist.

Verwandte Themen