2016-03-25 17 views
3

Ich möchte die Schaltfläche "Speichern" entfernen und Änderungen automatisch speichern.Beste Vorgehensweise für automatisches Speichern bei Änderung

Die Art, wie ich das weiß, kann mit der OnChange-Funktion gemacht werden.

Mit dem Gedanken, dass die Webanwendung von ziemlich vielen Menschen verwendet wird, wird die Anzahl der Anfragen an den Server höchstwahrscheinlich in einer sehr kurzen Zeit auf ein überwältigendes Niveau ansteigen.

Was ist der beste Ansatz zum automatischen Speichern ohne überwältigende/so viele Anfragen an den Server zu senden?

Es gibt zwei Arten von editierbaren Felder:

1- Einfache Felder, die kleine Menge von Buchstaben/Wörter haben würde. enter image description here

2 Textbereiche für große Kopienanzahl. enter image description here

+0

Wo ist der Code? –

+0

@VenomFangs Es gibt noch keinen Code, ich versuche herauszufinden, welchen Ansatz ich vor der Kodierung nehmen sollte. – Leo

+0

Einfache Lösung, die nicht versehentlich viele Serveraufrufe verursacht: Speichern Sie eine "hasAnythingChanged" Variable, dann jede x Zeit, wenn etwas geändert wurde, und speichern Sie sie auf dem Server. (Wahrscheinlich ist es auch eine gute Idee, eine Eingabeaufforderung hinzuzufügen, wenn sie versuchen, die Seite mit ungespeicherten Änderungen zu verlassen). – DBS

Antwort

1

Dies ist eine Nicht-Code-Antwort auf Ihre Frage.

Es gibt keinen guten Weg, dies zu tun. Sie können die Aktualisierungen basierend auf X Anzahl der Wörter vornehmen, oder Sie können jedes Zeichen oder sogar jede Sekunde machen. Das Problem ist, dass es Tonnen von Verbindungen gibt.

Es ist ressourcen- und bandbreitenintensiv und erfordert, dass Sie jedes Mal eine Internetverbindung verwenden, wenn Sie speichern möchten. Dann haben Sie das Problem, was Sie an die Datenbank senden möchten?

Wie überprüfen Sie, was die Datenbank bereits hat? Schickst du das Ganze einfach nochmal?

Das sind alles Fragen, die Sie beantworten müssen. Aber im Wesentlichen ist es das gleiche wie es jetzt ist ... außer dass Sie irgendeine Art von Code haben (wie ich erwähnte Zeichenänderung, Wortänderung, Zeitänderung) und dann entweder den gesamten Text/Feld drücken werde. oder was es nicht in der Datenbank hat.

So gibt es keine gute Möglichkeit, es zu tun. Wenn ich es tun müsste, würde ich die Informationen lokal speichern. Dann sagen wir einmal alle 30 Sekunden, aktualisieren Sie es und senden Sie nur die geänderten Zeichen an die Datenbank.

0

Ich würde vorschlagen, Autosave auf der onFocusout Veranstaltung statt onChange. Auf diese Weise werden Serveranforderungen reduziert, wenn Eingaben den Fokus verlieren. Fügen Sie den Eingabefeldern eine Klasse hinzu, z. B. class="autosave", und erstellen Sie dann einen Fokusout-Listener.

$('.autosave').focusout(function(){ 
    autoSave(); 
}); 

Hier ist eine Geige: https://jsfiddle.net/fcLuw5p9/

3

Ich persönlich, dies zu tun auf einem debounce werden würde sagen, eine halbe Sekunde zu Sekunde. Wenn ein Benutzer für einen bestimmten Zeitraum die Eingabe beendet, wird der Speichervorgang ausgeführt. Es ist auch ziemlich einfach zu erreichen:

var debounce = null; 
$(document).ready(function() { 
    $('.field').keydown(function() { 
     clearTimeout(debounce); 
     debounce = setTimeout(function(){ 
      // SAVE 
     }, 500); 
    }); 
});